Page 2 of 3

Re: IP, Mac Address, Name desde mi modem

PostPosted: Sun Jun 23, 2024 1:34 am
by FranciscoA
Gracias Cesar.
Hasta ahi habia llegado:

Code: Select all  Expand view
#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

PostPosted: 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

PostPosted: 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

PostPosted: 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
Image
Este es el código
Code: Select all  Expand view
#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

PostPosted: 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

PostPosted: 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 view
#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

PostPosted: Mon Jun 24, 2024 12:01 am
by FranciscoA
Solo funciona en redes WiFi... :oops:

Re: IP, Mac Address, Name desde mi modem

PostPosted: Mon Jun 24, 2024 12:03 am
by FranciscoA
FranciscoA wrote:Solo funciona en redes WiFi... :oops:

Code: Select all  Expand view
//----------------------------------------------//
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

PostPosted: 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 view

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

PostPosted: 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 view
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

PostPosted: 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.
Image

Re: IP, Mac Address, Name desde mi modem

PostPosted: 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 view

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 view
oLocator := win_oleCreateObject( "wbemScripting.SwbemLocator" )
    oWmi     := oLocator:ConnectServer()


espero les sirva..

Code: Select all  Expand view

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

PostPosted: Thu Jun 27, 2024 6:31 am
by Antonio Linares
gracias Daniel! :-)

Re: IP, Mac Address, Name desde mi modem

PostPosted: Thu Jun 27, 2024 11:56 am
by cmsoft
Muchas gracias Daniel!!

Re: IP, Mac Address, Name desde mi modem

PostPosted: 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.