#include "FiveWin.ch"
FUNCTION Main() //Probando()
local aDispConect := {}, cDir := TrueName(".\")
local cTexto, n, nLineas, cLinea, cIP, cMac, cNombre, cIpInterfaz, cFabricante
WAITRUN( "cmd.exe /c arp -a > " +cDir+ "\ARP.txt" , .f.)
//WaitRun("Notepad.exe " +cDir+ "\ARP.txt")
cTexto := MEMOREAD(cDir + "\ARP.txt")
nLineas := MLCOUNT(cTexto)
//Agreg dispositivo desde donde se corre el programa. El .txt solo presenta la IP
cLinea := MEMOLINE(cTexto,255,2) //en linea 2 esta la ip del equipo desde donde se corre
cIpInterfaz := SUBSTR(cLinea,11,12)
WsaStartUp()
cNombre := GetHostName()
WsaCleanUp()
cMac := MacAddrHost()
cFabricante := Fabricante(AllTrim(STRTRAN(cMac,'-','')))
AAdd( aDispConect, { cIpInterfaz, cMac, cNombre, cFabricante} )
//Fin Agreg dispositivo desde donde se corre el programa
For n := 4 To nLineas //En lin 4 del .txt comienzan las ip y mac
cLinea := MEMOLINE(cTexto,255,n)
cIP := SUBSTR(cLinea,3,20)
cMac := SUBSTR(cLinea,25,21)
WsaStartUp()
cNombre := GetHostByAddress(AllTrim(cIP)) //Obtiene nombre a partir de la IP
WsaCleanUp()
cNombre := if(empty(cNombre),AllTrim(cIP),cNombre)
cFabricante := Fabricante(AllTrim(STRTRAN(cMac,'-','')))
if Substr(AllTrim(cIP),1,9) == Substr(AllTrim(cIpInterfaz),1,9) .and. AllTrim(cMac) <> "ff-ff-ff-ff-ff-ff"
AAdd( aDispConect, { cIP, cMac, cNombre ,cFabricante} )
endif
Next
SysRefresh()
XBROWSER aDispConect TITLE "Dispositivos Conectados" ;
SETUP ( oBrw:cHeaders := {"IP", "MAC", "DISPOSITIVO","FABRICANTE"} )
RETURN NIL
STATIC FUNCTION Fabricante(cMac) //Cesar (cmsof)
LOCAL cText, i , cResult
cText := WebPageContents('https://aruljohn.com/mac/'+cMac)
cResult := SUBSTR(cText,At('<tr><td>Vendor</td><td><span id="vdr14999879">',cText)+46,200 )
cResult := LEFT(cResult,At('</span>',cResult)-1)
RETURN cResult
//Codigo de Danielmaximiliano
// memberlist.php?mode=viewprofile&u=2388
//----------------------------------------------//
STATIC function MacAddrHost()
local oCollection1, oCollection2, obj1, obj2
local nInd := 1, IPAddress, MACAddress, aInfo := {}
local oLoc := CreateObject( "wbemScripting.SwbemLocator" )
local oWMI := oLoc:ConnectServer()
oCollection1 := oWMI:ExecQuery( "SELECT * FROM Win32_NetworkAdapter WHERE Manufacturer != 'Microsoft' AND NOT PNPDeviceID LIKE 'ROOT\\%'" )
oCollection2 := oWMI:ExecQuery( 'SELECT * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE' )
For Each obj1 In oCollection1
For Each obj2 In oCollection2
IPAddress := obj2:IPAddress(0)
MACAddress := obj2:MACAddress(0)
aadd( aInfo,{ IPAddress, MACAddress } )
Next
Next
RELEASE oLoc, oWMI
return Alltrim( aInfo[1,2] )
Antonio Linares wrote:gracias Daniel!
FranciscoA wrote:César, muy bien!
Como bien dices, solo falta obtener la MAC del equipo anfitrión, y los nombres de los demás dispositivos que no son computadoras.
Continuaremos investigando.
Saludos.
C:\Users\danie>nbtstat -n
Avast SecureLine VPN:
Dirección IP del nodo: [0.0.0.0] Id. de ámbito : []
No hay nombres en la caché
Ethernet:
Dirección IP del nodo: [192.168.1.40] Id. de ámbito : []
Tabla de nombres locales NetBIOS
Nombre Tipo Estado
---------------------------------------------
DANIEL <20> Único Registrado
DANIEL <00> Único Registrado
WORKGROUP <00> Grupo Registrado
Wi-Fi:
Dirección IP del nodo: [0.0.0.0] Id. de ámbito : []
No hay nombres en la caché
Function EquipoHost(nF)
local aEquipo :={}, aInfo
local cDir := TrueName(".\"), cFile := cDir+ "\EqHost.txt", cTexto, aTexto, n, nLin := 0
local cHost:="", cIP := "", cMac := "", cDHCP := "", cFabri := "", cCon := "", cLinea, nLineas
if nF = 1
aInfo := GetNetCardInfo() //XBROWSER aInfo
AEVAL( aInfo, {|a,n| if(!Empty(aInfo[n,9]), aadd(aEquipo,{NETNAME(),aInfo[n,7],aInfo[n,3],aInfo[n,9],aInfo[n,2]}) ,) } )
elseif nF = 2
WAITRUN( "cmd.exe /c ipconfig /all > " +(cFile), .f.) //WaitRun("Notepad.exe " +(cFile))
aTexto := HB_ATokens(MemoRead((cFile)), CRLF)
For n := 1 to len(aTexto) //Saber como esta conectado, WiFi o Ethernet
if Substr(alltrim(aTexto[n]),1,14) == "Nombre de host" ; cHost := Alltrim(Substr(aTexto[n], RAT(":",aTexto[n]) +1, 20))
elseif alltrim(aTexto[n]) == "Adaptador de Ethernet Ethernet:" ; cCon := "Ethernet" ; nLin:=n
elseif alltrim(aTexto[n]) == "Adaptador de LAN inal mbrica Wi-Fi:" ; cCon := "Wifi" ; nLin:=n
endif
Next
For n := nLin to len(aTexto)
if Substr(alltrim(aTexto[n]),1,11) == "Descripci¢n" ; cFabri:= Alltrim(Substr(aTexto[n], RAT(":",aTexto[n]) +1, 50))
elseif Substr(alltrim(aTexto[n]),1,16) == "Direcci¢n f¡sica" ; cMac := Alltrim(Substr(aTexto[n], RAT(":",aTexto[n]) +1, 20))
elseif Substr(alltrim(aTexto[n]),1,14) == "Direcci¢n IPv4" ; cIP := Substr(aTexto[n],48, RAT("(Preferido)",aTexto[n])-48)
elseif Substr(alltrim(aTexto[n]),1,13) == "Servidor DHCP" ; cDHCP := Alltrim(Substr(aTexto[n], RAT(":",aTexto[n]) +1, 20)) ; Exit
endif
Next
aadd(aEquipo, {cHost,cIP,cMac,cDHCP,cFabri})
Ferase(cFile)
elseif nF = 3
WAITRUN( "cmd.exe /c ipconfig /all > " +(cFile), .f.) // WaitRun("Notepad.exe " +(cFile))
cTexto := MEMOREAD((cFile)) ; nLineas := MLCOUNT(cTexto)
For n := 1 to nLineas
cLinea := MEMOLINE(cTexto,255,n)
if( AT("Nombre de host", cLinea) > 0, cHost := Alltrim(Substr(cLinea,38,20)) ,)
if( AT("Adaptador de Ethernet Ethernet:", cLinea) > 0, (cCon := "Ethernet", nLin := n) ,)
if( AT("Adaptador de LAN inal mbrica Wi-Fi:", cLinea) > 0, (cCon := "Wifi", nLin := n) ,)
Next
For n := nLin to nLineas
cLinea := MEMOLINE(cTexto,255,n)
if( AT("Descripci¢n", cLinea) > 0, cFabri:= Alltrim(Substr(cLinea,48,60)) ,)
if( AT("Direcci¢n f¡sica", cLinea) > 0, cMac := Alltrim(Substr(cLinea,48,20)) ,)
if( AT("Direcci¢n IPv4", cLinea) > 0, cIP := Substr(cLinea,48, RAT("(Preferido)",cLinea)-48 ) ,)
if AT("Servidor DHCP", cLinea) > 0 ; cDHCP := Alltrim(Substr(cLinea,48,20)) ; Exit ; endif
Next
aadd(aEquipo, {cHost,cIP,cMac,cDHCP,cFabri})
Ferase((cFile))
endif
SysRefresh()
Return aEquipo
// C:\FWH\SAMPLES\IPMAC2.PRG
#include "FiveWin.ch"
FUNCTION Main()
LOCAL nF := 2 // Option 2 = ERROR -> 1 Y 3, MUY BIEN.
EquipoHost( nF )
RETURN NIL
FUNCTION EquipoHost( nF )
LOCAL aEquipo := {}, aInfo
// LOCAL cDir := TrueName( ".\" ), cFile := cDir + "\EqHost.txt", cTexto, aTexto, n, nLin := 0
LOCAL cDir := TrueName( ".\" ), cFile := cDir + "EqHost.txt", cTexto, aTexto, n, nLin := 0
LOCAL cHost := "", cIP := "", cMac := "", cDHCP := "", cFabri := "", cCon := "", cLinea, nLineas
IF nF = 1
aInfo := GetNetCardInfo() // XBROWSER aInfo
AEval( aInfo, {| a, n | IF( !Empty( aInfo[ n, 9 ] ), AAdd( aEquipo, { NetName(), aInfo[ n, 7 ], aInfo[ n, 3 ], aInfo[ n, 9 ], aInfo[ n, 2 ] } ), ) } )
ELSEIF nF = 2
WAITRUN( "cmd.exe /c ipconfig /all > " + ( cFile ), .F. ) // WaitRun("Notepad.exe " +(cFile))
aTexto := hb_ATokens( MemoRead( ( cFile ) ), CRLF )
FOR n := 1 TO Len( aTexto ) // Saber como esta conectado, WiFi o Ethernet
IF SubStr( AllTrim( aTexto[ n ] ), 1, 14 ) == "Nombre de host" ; cHost := AllTrim( SubStr( aTexto[ n ], RAt( ":", aTexto[ n ] ) + 1, 20 ) )
ELSEIF AllTrim( aTexto[ n ] ) == "Adaptador de Ethernet Ethernet:" ; cCon := "Ethernet" ; nLin := n
ELSEIF AllTrim( aTexto[ n ] ) == "Adaptador de LAN inal mbrica Wi-Fi:" ; cCon := "Wifi" ; nLin := n
ENDIF
NEXT
FOR n := nLin TO Len( aTexto )
// Dear Francisco, error aqui:
// Error description: Error BASE/1132 Bound error: array access
IF SubStr( AllTrim( aTexto[ n ] ), 1, 11 ) == "Descripci¢n" ; cFabri := AllTrim( SubStr( aTexto[ n ], RAt( ":", aTexto[ n ] ) + 1, 50 ) )
ELSEIF SubStr( AllTrim( aTexto[ n ] ), 1, 16 ) == "Direcci¢n f¡sica" ; cMac := AllTrim( SubStr( aTexto[ n ], RAt( ":", aTexto[ n ] ) + 1, 20 ) )
ELSEIF SubStr( AllTrim( aTexto[ n ] ), 1, 14 ) == "Direcci¢n IPv4" ; cIP := SubStr( aTexto[ n ], 48, RAt( "(Preferido)", aTexto[ n ] ) - 48 )
ELSEIF SubStr( AllTrim( aTexto[ n ] ), 1, 13 ) == "Servidor DHCP" ; cDHCP := AllTrim( SubStr( aTexto[ n ], RAt( ":", aTexto[ n ] ) + 1, 20 ) ) ; EXIT
ENDIF
NEXT
AAdd( aEquipo, { cHost, cIP, cMac, cDHCP, cFabri } )
// FErase( cFile )
ELSEIF nF = 3
WAITRUN( "cmd.exe /c ipconfig /all > " + ( cFile ), .F. ) // WaitRun("Notepad.exe " +(cFile))
cTexto := MemoRead( ( cFile ) ) ; nLineas := MLCount( cTexto )
FOR n := 1 to nLineas
cLinea := MemoLine( cTexto, 255, n )
IF( At( "Nombre de host", cLinea ) > 0, cHost := AllTrim( SubStr( cLinea, 38, 20 ) ), )
IF( At( "Adaptador de Ethernet Ethernet:", cLinea ) > 0, ( cCon := "Ethernet", nLin := n ), )
IF( At( "Adaptador de LAN inal mbrica Wi-Fi:", cLinea ) > 0, ( cCon := "Wifi", nLin := n ), )
NEXT
FOR n := nLin to nLineas
cLinea := MemoLine( cTexto, 255, n )
IF( At( "Descripci¢n", cLinea ) > 0, cFabri := AllTrim( SubStr( cLinea, 48, 60 ) ), )
IF( At( "Direcci¢n f¡sica", cLinea ) > 0, cMac := AllTrim( SubStr( cLinea, 48, 20 ) ), )
IF( At( "Direcci¢n IPv4", cLinea ) > 0, cIP := SubStr( cLinea, 48, RAt( "(Preferido)", cLinea ) - 48 ), )
IF At( "Servidor DHCP", cLinea ) > 0 ; cDHCP := AllTrim( SubStr( cLinea, 48, 20 ) ) ; EXIT ; ENDIF
NEXT
AAdd( aEquipo, { cHost, cIP, cMac, cDHCP, cFabri } )
// FErase( ( cFile ) )
ENDIF
SysRefresh()
XBROWSE( cFile )
RETURN( aEquipo )
// FIN / END
// C:\FWH\SAMPLES\IPMAC3.PRG
#include "FiveWin.ch"
FUNCTION Main()
EquipoHost(2)
RETURN NIL
Function EquipoHost(nF)
local aEquipo :={}, aInfo
local cDir := TrueName(".\"), cFile := cDir+ "\EqHost.txt", cTexto, aTexto, n, nLin := 0
local cHost:="", cIP := "", cMac := "", cDHCP := "", cFabri := "", cCon := "", cLinea, nLineas
if nF = 1
aInfo := GetNetCardInfo() //XBROWSER aInfo
AEVAL( aInfo, {|a,n| if(!Empty(aInfo[n,9]), aadd(aEquipo,{NETNAME(),aInfo[n,7],aInfo[n,3],aInfo[n,9],aInfo[n,2]}) ,) } )
elseif nF = 2
WAITRUN( "cmd.exe /c ipconfig /all > " +(cFile), .f.) //WaitRun("Notepad.exe " +(cFile))
aTexto := HB_ATokens(MemoRead((cFile)), CRLF)
For n := 1 to len(aTexto) //Saber como esta conectado, WiFi o Ethernet
if Substr(alltrim(aTexto[n]),1,14) == "Nombre de host" ; cHost := Alltrim(Substr(aTexto[n], RAT(":",aTexto[n]) +1, 20))
elseif alltrim(aTexto[n]) == "Adaptador de Ethernet Ethernet:" ; cCon := "Ethernet" ; nLin:=n
elseif alltrim(aTexto[n]) == "Adaptador de LAN inal mbrica Wi-Fi:" ; cCon := "Wifi" ; nLin:=n
endif
Next
For n := nLin to len(aTexto)
if Substr(alltrim(aTexto[n]),1,11) == "Descripci¢n" ; cFabri:= Alltrim(Substr(aTexto[n], RAT(":",aTexto[n]) +1, 50))
elseif Substr(alltrim(aTexto[n]),1,16) == "Direcci¢n f¡sica" ; cMac := Alltrim(Substr(aTexto[n], RAT(":",aTexto[n]) +1, 20))
elseif Substr(alltrim(aTexto[n]),1,14) == "Direcci¢n IPv4" ; cIP := Substr(aTexto[n],48, RAT("(Preferido)",aTexto[n])-48)
elseif Substr(alltrim(aTexto[n]),1,13) == "Servidor DHCP" ; cDHCP := Alltrim(Substr(aTexto[n], RAT(":",aTexto[n]) +1, 20)) ; Exit
endif
Next
aadd(aEquipo, {cHost,cIP,cMac,cDHCP,cFabri})
XBROWSE( cFile )
Ferase(cFile)
elseif nF = 3
WAITRUN( "cmd.exe /c ipconfig /all > " +(cFile), .f.) // WaitRun("Notepad.exe " +(cFile))
cTexto := MEMOREAD((cFile)) ; nLineas := MLCOUNT(cTexto)
For n := 1 to nLineas
cLinea := MEMOLINE(cTexto,255,n)
if( AT("Nombre de host", cLinea) > 0, cHost := Alltrim(Substr(cLinea,38,20)) ,)
if( AT("Adaptador de Ethernet Ethernet:", cLinea) > 0, (cCon := "Ethernet", nLin := n) ,)
if( AT("Adaptador de LAN inal mbrica Wi-Fi:", cLinea) > 0, (cCon := "Wifi", nLin := n) ,)
Next
For n := nLin to nLineas
cLinea := MEMOLINE(cTexto,255,n)
if( AT("Descripci¢n", cLinea) > 0, cFabri:= Alltrim(Substr(cLinea,48,60)) ,)
if( AT("Direcci¢n f¡sica", cLinea) > 0, cMac := Alltrim(Substr(cLinea,48,20)) ,)
if( AT("Direcci¢n IPv4", cLinea) > 0, cIP := Substr(cLinea,48, RAT("(Preferido)",cLinea)-48 ) ,)
if AT("Servidor DHCP", cLinea) > 0 ; cDHCP := Alltrim(Substr(cLinea,48,20)) ; Exit ; endif
Next
aadd(aEquipo, {cHost,cIP,cMac,cDHCP,cFabri})
Ferase((cFile))
endif
SysRefresh()
Return aEquipo
Configuraci¢n IP de Windows
Nombre de host. . . . . . . . . : TACTIL
Sufijo DNS principal . . . . . :
Tipo de nodo. . . . . . . . . . : h¡brido
Enrutamiento IP habilitado. . . : no
Proxy WINS habilitado . . . . . : no
Adaptador de Ethernet Ethernet:
Estado de los medios. . . . . . . . . . . : medios desconectados
Sufijo DNS espec¡fico para la conexi¢n. . :
Descripci¢n . . . . . . . . . . . . . . . : Realtek PCIe GbE Family Controller
Direcci¢n f¡sica. . . . . . . . . . . . . : 00-25-AB-72-29-C1
DHCP habilitado . . . . . . . . . . . . . : s¡
Configuraci¢n autom tica habilitada . . . : s¡
Adaptador de LAN inal mbrica Conexi¢n de rea local* 8:
Estado de los medios. . . . . . . . . . . : medios desconectados
Sufijo DNS espec¡fico para la conexi¢n. . :
Descripci¢n . . . . . . . . . . . . . . . : Microsoft Wi-Fi Direct Virtual Adapter
Direcci¢n f¡sica. . . . . . . . . . . . . : 36-68-95-7B-BC-93
DHCP habilitado . . . . . . . . . . . . . : s¡
Configuraci¢n autom tica habilitada . . . : s¡
Adaptador de LAN inal mbrica Conexi¢n de rea local* 10:
Estado de los medios. . . . . . . . . . . : medios desconectados
Sufijo DNS espec¡fico para la conexi¢n. . :
Descripci¢n . . . . . . . . . . . . . . . : Microsoft Wi-Fi Direct Virtual Adapter #2
Direcci¢n f¡sica. . . . . . . . . . . . . : 34-68-95-7B-BC-93
DHCP habilitado . . . . . . . . . . . . . : no
Configuraci¢n autom tica habilitada . . . : s¡
Adaptador de LAN inal mbrica Wi-Fi:
Sufijo DNS espec¡fico para la conexi¢n. . :
Descripci¢n . . . . . . . . . . . . . . . : Realtek 8821AE Wireless LAN 802.11ac PCI-E NIC
Direcci¢n f¡sica. . . . . . . . . . . . . : 34-68-95-7B-BC-93
DHCP habilitado . . . . . . . . . . . . . : s¡
Configuraci¢n autom tica habilitada . . . : s¡
Direcci¢n IPv6 . . . . . . . . . . : 2803:2d60:1102:1e37::1(Preferido)
Concesi¢n obtenida. . . . . . . . . . . . : mi‚rcoles, 17 de julio de 2024 08:00:34
La concesi¢n expira . . . . . . . . . . . : lunes, 22 de julio de 2024 08:00:35
Direcci¢n IPv6 . . . . . . . . . . : 2803:2d60:1102:1e37:686c:522f:4f39:2e6d(Preferido)
Direcci¢n IPv6 temporal. . . . . . : 2803:2d60:1102:1e37:3859:c8bd:e05b:3827(Preferido)
V¡nculo: direcci¢n IPv6 local. . . : fe80::696:1dbc:c8ba:5078%18(Preferido)
Direcci¢n IPv4. . . . . . . . . . . . . . : 192.168.1.14(Preferido)
M scara de subred . . . . . . . . . . . . : 255.255.255.0
Concesi¢n obtenida. . . . . . . . . . . . : lunes, 15 de julio de 2024 21:13:28
La concesi¢n expira . . . . . . . . . . . : jueves, 18 de julio de 2024 08:00:53
Puerta de enlace predeterminada . . . . . : fe80::3eb7:4bff:fefe:f454%18
192.168.1.1
Servidor DHCP . . . . . . . . . . . . . . : 192.168.1.1
IAID DHCPv6 . . . . . . . . . . . . . . . : 154429589
DUID de cliente DHCPv6. . . . . . . . . . : 00-01-00-01-2D-0F-F5-5A-00-25-AB-72-29-C1
Servidores DNS. . . . . . . . . . . . . . : 2800:98:0:4::4
2803:f340:1300::c
190.184.56.72
216.230.139.8
NetBIOS sobre TCP/IP. . . . . . . . . . . : habilitado
Adaptador de Ethernet Conexi¢n de red Bluetooth:
Estado de los medios. . . . . . . . . . . : medios desconectados
Sufijo DNS espec¡fico para la conexi¢n. . :
Descripci¢n . . . . . . . . . . . . . . . : Bluetooth Device (Personal Area Network)
Direcci¢n f¡sica. . . . . . . . . . . . . : 34-68-95-7B-BC-94
DHCP habilitado . . . . . . . . . . . . . : s¡
Configuraci¢n autom tica habilitada . . . : s¡
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: Google [Bot] and 29 guests