Aqui podemos ver el resultado de lo que estoy haciendo, y lo que consigo con el codigo de Daniel.
https://ibb.co/bPQsrMZ
#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é
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: No registered users and 40 guests