Page 2 of 4
Re: IP, Mac Address, Name desde mi modem
Posted: Sun Jun 23, 2024 1:34 am
by FranciscoA
Gracias Cesar.
Hasta ahi habia llegado:
Code: Select all | Expand
#include "FiveWin.ch"
FUNCTION Main() //Probando()
local aDispConect := {}, cDir := TrueName(".\")
local cTexto, n, nLineas, cLinea, cIP, cMac, cNombre, cIpInterfaz
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)
cNombre := NETNAME()
AAdd( aDispConect, { cIpInterfaz, "cMac?", cNombre } )
//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)
cNombre := GetHostByAddress(AllTrim(cIP)) //Obtiene nombre a partir de la IP
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 } )
endif
Next
SysRefresh()
XBROWSER aDispConect TITLE "Dispositivos Conectados" ;
SETUP ( oBrw:cHeaders := {"IP", "MAC", "DISPOSITIVO"} )
RETURN NIL
Re: IP, Mac Address, Name desde mi modem
Posted: Sun Jun 23, 2024 2:34 am
by cmsoft
Francisco:
Tu codigo es más claro y eficiente.
Lo otro te sirve?
Re: IP, Mac Address, Name desde mi modem
Posted: Sun Jun 23, 2024 3:30 am
by FranciscoA
Cesar, por supuesto que me es util.
Como puedes ver, falta obtener los nombres. No sé porqué -> cNombre := GetHostByAddress(AllTrim(cIP)) , aunque lo use entre las func WsaStartUp() y WsaCleanUp()
Continuaré buscando.
Saludos.
Re: IP, Mac Address, Name desde mi modem
Posted: Sun Jun 23, 2024 9:56 am
by cmsoft
Francisco:
Acá me muestra los nombres de los que son PC (de los otros, al igual que IP Scanner) me muestra la ip porque no son computadoras
Este es el código
Code: Select all | Expand
#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()
AAdd( aDispConect, { cIpInterfaz, "cMac?", cNombre,' '} )
//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)
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
Estuve viendo como obtener el mac de mi equipo pero no logro hacerlo
Re: IP, Mac Address, Name desde mi modem
Posted: Sun Jun 23, 2024 6:36 pm
by FranciscoA
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.
Re: IP, Mac Address, Name desde mi modem
Posted: Sun Jun 23, 2024 11:13 pm
by FranciscoA
César, ésta es una posible solución para obtener la MacAddress del equipo Host:
Code: Select all | Expand
#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.)
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)
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
//----------------------------------------------//
STATIC function MacAddrHost()
local cDir := TrueName(".\"), cMac, nLin, cTexto, aData
WAITRUN( "cmd.exe /c ipconfig /all > " +cDir+ "\McHost.txt" , .f.)
cTexto := MEMOREAD(cDir + "\McHost.txt")
aData := hb_ATokens(cTexto, chr(10))
nLin := AScan(aData, "Adaptador de LAN inal mbrica Wi-Fi:") +4
cMac := MEMOLINE(cTexto,255,nLin)
cMac := Alltrim(Substr(cMac,47,20))
Ferase(cDir+ "\McHost.txt")
return cMac
Re: IP, Mac Address, Name desde mi modem
Posted: Mon Jun 24, 2024 12:01 am
by FranciscoA
Solo funciona en redes WiFi...
Re: IP, Mac Address, Name desde mi modem
Posted: Mon Jun 24, 2024 12:03 am
by FranciscoA
FranciscoA wrote:Solo funciona en redes WiFi...
Code: Select all | Expand
//----------------------------------------------//
STATIC function MacAddrHost()
local cDir := TrueName(".\"), cMac, nLin, cTexto, aData
WAITRUN( "cmd.exe /c ipconfig /all > " +cDir+ "\McHost.txt" , .f.)
cTexto := MEMOREAD(cDir + "\McHost.txt")
aData := hb_ATokens(cTexto, chr(10))
nLin := AScan(aData, "Adaptador de LAN inal mbrica Wi-Fi:") +4
cMac := MEMOLINE(cTexto,255,nLin)
cMac := Alltrim(Substr(cMac,47,20))
Ferase(cDir+ "\McHost.txt")
return cMac
Re: IP, Mac Address, Name desde mi modem
Posted: Mon Jun 24, 2024 12:25 am
by cmsoft
Francisco, ahi creo que lo que obtienes es la mac de la placa de red, pero no del equipo.
Lo había pensado, pero ya no me dirá la marca de la pc, sino de la placa de red.
Estuve intentando algo por el estilo como esto:
Code: Select all | Expand
oLocator := CreateObject( "WbemScripting.SWbemLocator" )
oWmi := oLocator:ConnectServer()
FOR EACH oBoard IN oWmi:ExecQuery( "SELECT * FROM Win32_ComputerSystemProduct" )
Pero sin exito
Tal vez algún conocedor de estas cuestiones nos indiquen como
Re: IP, Mac Address, Name desde mi modem
Posted: Mon Jun 24, 2024 12:55 am
by FranciscoA
César.
De esta manera parece que funciona. Me da las MacAddress iguales a las que aparecen en el administrador del modem.
#
Code: Select all | Expand
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.)
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)
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
//----------------------------------------------//
STATIC function MacAddrHost()
local cDir := TrueName(".\"), cMac := "", nLin, cTexto, aData
WAITRUN( "cmd.exe /c ipconfig /all > " +cDir+ "\McHost.txt" , .f.)
WaitRun("Notepad.exe " +cDir+ "\McHost.txt")
cTexto := MEMOREAD(cDir + "\McHost.txt")
aData := hb_ATokens(cTexto, chr(10))
if ( nLin := AScan(aData, "Adaptador de LAN inal mbrica Wi-Fi:") ) > 0
else
nLin := AScan(aData, "Adaptador de Ethernet Ethernet:")
endif
nLin += 4
cMac := MEMOLINE(cTexto,255,nLin)
cMac := Alltrim(Substr(cMac,47,20))
Ferase(cDir+ "\McHost.txt")
return cMac
Re: IP, Mac Address, Name desde mi modem
Posted: Mon Jun 24, 2024 1:17 am
by cmsoft
Francisco, en mi caso me esta devolviendo el nombre de la placa de red, no la mac.
Re: IP, Mac Address, Name desde mi modem
Posted: Thu Jun 27, 2024 2:36 am
by Danielmaximiliano
cmsoft wrote:Francisco, ahi creo que lo que obtienes es la mac de la placa de red, pero no del equipo.
Lo había pensado, pero ya no me dirá la marca de la pc, sino de la placa de red.
Estuve intentando algo por el estilo como esto:
Code: Select all | Expand
oLocator := CreateObject( "WbemScripting.SWbemLocator" )
oWmi := oLocator:ConnectServer()
FOR EACH oBoard IN oWmi:ExecQuery( "SELECT * FROM Win32_ComputerSystemProduct" )
Pero sin exito
Tal vez algún conocedor de estas cuestiones nos indiquen como
Hola : en HMGforum utilizamos desde el 2015
Code: Select all | Expand
oLocator := win_oleCreateObject( "wbemScripting.SwbemLocator" )
oWmi := oLocator:ConnectServer()
espero les sirva..
Code: Select all | Expand
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
nTemp := obj1:NetConnectionStatus
For Each obj2 In oCollection2
nInd++
cDescrip := 'Description'+ALLTRIM(STR(nInd))+': '+CHR(9)+SUBSTR( obj2:description, 1, AT( "-", obj2:description ) -2 )+' / '+aNetConnectStat[ nTemp+1 ]+CRLF
ServiceName := ' ServiceName'+ALLTRIM(STR(nInd))+': '+CHR(9)+obj2:ServiceName(0)+CRLF
IPAddress := ' IPAddress'+ALLTRIM(STR(nInd))+': '+CHR(9)+obj2:IPAddress(0)+CRLF
*DefaultIPGateway := 'DefaultIPGateway: '+obj:DefaultIPGateway(0) // ERROR ! ????
MACAddress := ' MACAddress'+ALLTRIM(STR(nInd))+': '+CHR(9)+obj2:MACAddress(0)
data6 += cDescrip+ServiceName+IPAddress+MACAddress+CRLF
Next
Next
Re: IP, Mac Address, Name desde mi modem
Posted: Thu Jun 27, 2024 6:31 am
by Antonio Linares
gracias Daniel!
Re: IP, Mac Address, Name desde mi modem
Posted: Thu Jun 27, 2024 11:56 am
by cmsoft
Muchas gracias Daniel!!
Re: IP, Mac Address, Name desde mi modem
Posted: Fri Jun 28, 2024 3:11 am
by FranciscoA
Gracias, Daniel.
Efectivamente, de esa manera tambien logramos obtener IP y MAC del equipo.
Lo que me falta es lograr traer los nombres de todos los dispositivos en la red WiFi, ya que únicamente conseguimos los datos de las computadoras.