FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour IP, Mac Address, Name desde mi modem
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: IP, Mac Address, Name desde mi modem
Posted: Sun Jun 23, 2024 01:34 AM
Gracias Cesar.
Hasta ahi habia llegado:
Code (fw): Select all Collapse
#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
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: IP, Mac Address, Name desde mi modem
Posted: Sun Jun 23, 2024 02:34 AM

Francisco:

Tu codigo es más claro y eficiente.

Lo otro te sirve?

Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: IP, Mac Address, Name desde mi modem
Posted: Sun Jun 23, 2024 03:30 AM

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.

Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: IP, Mac Address, Name desde mi modem
Posted: Sun Jun 23, 2024 09:56 AM
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 (fw): Select all Collapse
#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
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: IP, Mac Address, Name desde mi modem
Posted: Sun Jun 23, 2024 06:36 PM

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.

Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: IP, Mac Address, Name desde mi modem
Posted: Sun Jun 23, 2024 11:13 PM
César, ésta es una posible solución para obtener la MacAddress del equipo Host:
Code (fw): Select all Collapse
#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
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: IP, Mac Address, Name desde mi modem
Posted: Mon Jun 24, 2024 12:01 AM
Solo funciona en redes WiFi... :oops:
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: IP, Mac Address, Name desde mi modem
Posted: Mon Jun 24, 2024 12:03 AM
FranciscoA wrote:Solo funciona en redes WiFi... :oops:
Code (fw): Select all Collapse
//----------------------------------------------//
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
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: IP, Mac Address, Name desde mi modem
Posted: Mon Jun 24, 2024 12:25 AM
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 (fw): Select all Collapse
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
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: IP, Mac Address, Name desde mi modem
Posted: Mon Jun 24, 2024 12:55 AM
César.
De esta manera parece que funciona. Me da las MacAddress iguales a las que aparecen en el administrador del modem.

#
Code (fw): Select all Collapse
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
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: IP, Mac Address, Name desde mi modem
Posted: Mon Jun 24, 2024 01:17 AM
Francisco, en mi caso me esta devolviendo el nombre de la placa de red, no la mac.
Posts: 34
Joined: Tue Mar 20, 2012 11:06 PM
Re: IP, Mac Address, Name desde mi modem
Posted: Thu Jun 27, 2024 02:36 AM
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 (fw): Select all Collapse
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 (fw): Select all Collapse
oLocator := win_oleCreateObject( "wbemScripting.SwbemLocator" )
    oWmi     := oLocator:ConnectServer()
espero les sirva..
Code (fw): Select all Collapse
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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: IP, Mac Address, Name desde mi modem
Posted: Thu Jun 27, 2024 06:31 AM
gracias Daniel! :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: IP, Mac Address, Name desde mi modem
Posted: Thu Jun 27, 2024 11:56 AM

Muchas gracias Daniel!!

Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: IP, Mac Address, Name desde mi modem
Posted: Fri Jun 28, 2024 03:11 AM

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.

Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql