IP, Mac Address, Name desde mi modem

IP, Mac Address, Name desde mi modem

Postby FranciscoA » Tue Jun 18, 2024 8:05 pm

Hola Todos.
Existe alguna function en FiveWin o xHarbour que me devuelva listado o array de todos los dispositivos conectados al modem-router, que incluya ip, mac address, name?
Alguien que pueda compartir algun codigo?
Gracias de antemano.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2158
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: IP, Mac Address, Name desde mi modem

Postby JoseAlvarez » Wed Jun 19, 2024 12:57 am

+1
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 795
Joined: Sun Nov 09, 2014 5:01 pm

Re: IP, Mac Address, Name desde mi modem

Postby jrestojeda » Wed Jun 19, 2024 9:50 pm

Hola,
Yo hace muchos años había escrito esto:

viewtopic.php?f=6&t=29608&hilit=fullnetview

Prueba a ver si te sirve.
Saludos,
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
User avatar
jrestojeda
 
Posts: 601
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: IP, Mac Address, Name desde mi modem

Postby FranciscoA » Wed Jun 19, 2024 11:36 pm

Gracias, Esteban.
El caso es que en ninguno de mis dos equipos con Windows 10 funciona el net view.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2158
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: IP, Mac Address, Name desde mi modem

Postby FranciscoA » Thu Jun 20, 2024 6:25 pm

Alguien mas?
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2158
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: IP, Mac Address, Name desde mi modem

Postby Jimmy » Sat Jun 22, 2024 4:46 am

hi.

to get MACadress you can use WMI on each PC

this CODE use HMG Syntax, modify for Fivewin
Code: Select all  Expand view
* #include "HMG.ch"
* REQUEST HB_GT_WIN_DEFAULT              // Console
// modify for Fivewin
#include "fivewin.ch"
#define SW_SHOW               5  
PROCEDURE Main

LOCAL a

   a := showNet()
   
   MEMOWRIT( "Info.TXT", a)
// modify for Fivewin
   ShellExecute(GetActiveWindow(), "open", "Info.TXT",,, SW_SHOW )
*   _Execute ( GetActiveWindow() , , "Info.TXT", , , 5 )
RETURN

FUNCTION showNet()
LOCAL oWmi, oBoard
LOCAL bError := ERRORBLOCK( { | oErr | BREAK( oErr ) } )
LOCAL cInfo := REPLICATE( "-", 80 ) + CRLF

   oWmi := WmiService()
   BEGIN SEQUENCE
      cInfo += "netIP" + CRLF
      FOR EACH oBoard IN oWmi:ExecQuery( "SELECT * FROM Win32_NetworkAdapterConfiguration" )
         cInfo += "Description : " + VAR2CHAR(oBoard:Description) + CRLF
         cInfo += "MACAddress  : " + VAR2CHAR(oBoard:MACAddress ) + CRLF
         cInfo += "IPAddress   : " + VAR2CHAR(oBoard:IPAddress  ) + CRLF
         cInfo += REPLICATE( "-", 80 ) + CRLF
      NEXT
   END SEQUENCE
   ERRORBLOCK( bError )

RETURN cInfo

STATIC FUNCTION VAR2CHAR( cIn )
LOCAL cOut := hb_valToExp( cIn )
RETURN STRTRAN( cOut, '"', '' )

STATIC FUNCTION WMIService()
STATIC oWMI
LOCAL oLocator

   IF oWMI == NIL
      oLocator := CreateObject( "wbemScripting.SwbemLocator" )
      oWMI := oLocator:ConnectServer()
   ENDIF

RETURN oWMI

*+ EOF:
 
greeting,
Jimmy
User avatar
Jimmy
 
Posts: 1732
Joined: Thu Sep 05, 2019 5:32 am
Location: Hamburg, Germany

Re: IP, Mac Address, Name desde mi modem

Postby Danielmaximiliano » Sat Jun 22, 2024 2:29 pm

Hola Jimmy:
Francisco necesita saber las IP con sus datos "Nombre de PC" y "Direccion MAC"
el comando "Net View" no funciona en windows 10 y 11 ya que pertenece a el protocolo SMB 1.0 que Microsoft recomienda no usar pero es posible usar activando 3 servicios en windows.
Net View nos da el nombre
nbtstat /A {direccion} nos da la direccion MAC (tampoco funciona en W10-11)
se deberia usar un poco de C y crear una libreria , ejemplos opensource hay varios y el que me gusto es Angry IP Scanner pero esta diseñado en java pero su interfaz es simple y intuitiva.
SLDS
Danielmaximiliano
 
Posts: 24
Joined: Tue Mar 20, 2012 11:06 pm

Re: IP, Mac Address, Name desde mi modem

Postby FranciscoA » Sat Jun 22, 2024 6:36 pm

Gracias Jimmy.
Desafortunadamente desconozco HMG.

Sin embargo hice prueba con WMI como lo he hecho anteriormente con otros comandos, y los resultados no son los que esperaba.

elseif nOption == 7
oQry := oWMI:ExecQuery( "SELECT * FROM Win32_NetworkAdapterConfiguration" )
aTitCols:= {"Caption", "Description","MacAddress","IpAddress"}
for each oPC in oQry
aadd( aInfo,{ oPC:Caption, oPC:Description, oPC:MacAddress, oPC:IpAddress } )
next
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2158
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: IP, Mac Address, Name desde mi modem

Postby FranciscoA » Sat Jun 22, 2024 6:42 pm

Daniel, gracias por contestar.

Voy a hecharle un vistaso a Angry IP scaner a ver que consigo.

La informacion podria sacarla del administrador del modem, pero no encuentro como enviar la info a un .txt, ademas que éste tampoco identifica los nombres de todos los dipositivos conectados a la red wifi (ejemplo tablets )

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2158
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: IP, Mac Address, Name desde mi modem

Postby Danielmaximiliano » Sat Jun 22, 2024 7:23 pm

FranciscoA wrote:Daniel, gracias por contestar.

Voy a hecharle un vistaso a Angry IP scaner a ver que consigo.

La informacion podria sacarla del administrador del modem, pero no encuentro como enviar la info a un .txt, ademas que éste tampoco identifica los nombres de todos los dipositivos conectados a la red wifi (ejemplo tablets )

Saludos.

Uso Fing para escritorio o Fing para android.
También estoy fijando me sobre librerías de descubrimiento de dispositivos IP .. hay una disponible pero no tengo instalado visual 15 para poder compilar con Make de mingw
Danielmaximiliano
 
Posts: 24
Joined: Tue Mar 20, 2012 11:06 pm

Re: IP, Mac Address, Name desde mi modem

Postby Willi Quintana » Sat Jun 22, 2024 8:11 pm

Estimado, echale un ojo a esto:
Code: Select all  Expand view

#include "FiveWin.ch"

Function WMainInfo()
LOCAL  oDatos, oSrv, oJob, i
LOCAL    nFree:= ""
LOCAL     oLoc:= CreateObject( "wbemScripting.SwbemLocator" )
LOCAL   objWMI:= oLoc:ConnectServer()

LOCAL oSistema:= objWMI:ExecQuery("Select * from Win32_PhysicalMedia")
LOCAL   oDisco:= objWMI:ExecQuery("Select * from Win32_LogicalDisk")
LOCAL   oParti:= objWMI:ExecQuery("Select * from CIM_DiskPartition")
LOCAL  oDisket:= objWMI:ExecQuery("Select * From Win32_LogicalDisk Where DeviceID = 'A:'")
LOCAL   objUnd:= objWMI:ExecQuery("Select * from Win32_MappedLogicalDisk")
LOCAL     oUnd:= objWMI:ExecQuery("Select * from Win32_CDROMDrive")
LOCAL  oResolu:= objWMI:ExecQuery("Select * from Win32_DesktopMonitor")
LOCAL  oSistem:= objWMI:ExecQuery("Select * from Win32_OperatingSystem")
LOCAL   oUsers:= objWMI:ExecQuery("Select * from Win32_Account")
LOCAL    oServ:= objWMI:ExecQuery("Select * from Win32_Service Where Name = 'Themes'")
LOCAL    oTime:= objWMI:ExecQuery("Select * from Win32_LocalTime")
LOCAL    oProc:= objWMI:ExecQuery("Select * from Win32_Processor")
LOCAL     oJbs:= objWMI:ExecQuery("SELECT Product, SerialNumber FROM Win32_BaseBoard")
LOCAL   oIpSet:= objWMI:ExecQuery("SELECT IPAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE")
LOCAL   oList := objWMI:ExecQuery("Select * from Win32_ComputerSystem")

//Return(Nil)
objWMI:= oLoc:ConnectServer()
oJbs := objWMI:ExecQuery( "select * from Win32_BaseBoard" )
//oSrv:ExecQuery( "SELECT * FROM Win32_BaseBoard" )


FOR Each oDatos In oSistema
    MsgInfo("Serial de fabrica: " + ALLTRIM(cValToChar(oDatos:SerialNumber)),"Numero de serie del disco duro")
NEXT



FOR Each oDatos In oDisco
    MsgInfo("Unidad: " + ALLTRIM(cValToChar(oDatos:Name)) + "\ Serial: " + ALLTRIM(cValToChar(oDatos:VolumeSerialNumber)),"Unidad y serial lógico de las unidades de disco")
NEXT



FOR Each oDatos in oParti
    MsgInfo(ALLTRIM(cValToChar(oDatos:Name)) + " - Tamaño: " +ALLTRIM(cValToChar(oDatos:Size)) + " En: " + ALLTRIM(cValToChar(oDatos:SystemName)) + " - Tipo: " + ALLTRIM(cValToChar(oDatos:TYPE)),"Particiones disponibles")
NEXT



FOR Each oDatos in oDisket
    nFree:= oDatos:FreeSpace

   IF VALTYPE(nFree) = "U"
         MsgInfo("No hay diskete en la unidad A:\","Aviso del WMI de Windows")
   ELSE
         MsgStop("
Hay un diskete en la unidad A:\","Aviso del WMI de Windows")
   ENDIF

NEXT



FOR Each oDatos In objUnd
    MsgInfo("
Device ID: " + oDatos:DeviceID +" Nombre: " + oDatos:Name +" Espacio Libre: " + cValtoChar(oDatos:FreeSpace) + " Tamaño: " + cValtoChar(oDatos:Size),"Lista de unidades Mapeadas en Mi PC")
NEXT



FOR Each oDatos in oUnd
    MsgInfo("
Unidad: " + oDatos:Drive + " " + "Nombre: " + oDatos:Caption,"Unidades de CD instaladas en el equipo")
NEXT



FOR Each oDatos in oResolu
   MsgInfo("
Trabajando a Resolución de Alto: " + cValToChar(oDatos:ScreenHeight) + "  y Ancho: " + cValToChar(oDatos:ScreenWidth),"Resolucion de Panralla")
NEXT



FOR Each oDatos In oSistem
    MsgInfo(oDatos:InstallDate,"
Fecha de Instalación de Windows XP")
NEXT



FOR Each oDatos in oSistem
    MsgInfo("
Directorio de Windows es: " + oDatos:WindowsDirectory +"  Directorio del Sistema es: "+ oDatos:SystemDirectory,"Directorio de Windows y del Sistema")
NEXT


/*
FOR Each oDatos in oUsers
    MsgInfo(cValToChar(oDatos:Name) + "
- " + cValToChar(oDatos:Caption),"Lista de Usuarios de Windows")
NEXT



MsgInfo("
Deshabilitarndo los Themes en Windows XP")
FOR Each oDatos in oServ
    oDatos:StopService()
    SysRefresh()
NEXT



MsgInfo("
Habilitando los Themes en Windows XP")
FOR Each oDatos in oServ
    oDatos:StartService()
    SysRefresh()
NEXT

*/

FOR Each oDatos in oSistem
    MsgInfo(oDatos:Caption + "
" + oDatos:VERSION,"Sistemas operativos instalados en el PC")
NEXT



FOR Each oDatos in oTime
     MsgInfo( "
Día: " + cValToChar(oDatos:DAY) + CRLF +;
              "
Día de la semana: " + cValToChar(oDatos:DayOfWeek) + CRLF +;
              "
Hora: " + cValToChar(oDatos:Hour) + CRLF +;
              "
Minutos: " + cValToChar(oDatos:Minute) + CRLF +;
              "
Mes: " + cValToChar(oDatos:MONTH) + CRLF +;
              "
Segundos: " + cValToChar(oDatos:Second) + CRLF +;
              "
Semana en el mes: " + cValToChar(oDatos:WeekInMonth) + CRLF +;
              "
Año: " + cValToChar(oDatos:YEAR),"Dia, Hora, Mes y Año desde WMI")
NEXT


FOR EACH oDatos IN oProc
        MsgInfo("
El Nombre del Procesador es: "+Alltrim(cValtoChar(oDatos:Name)),"Desde WMI")
        MsgInfo("
la Velocidad Actual del Procesador es: "+Alltrim(cValtoChar(oDatos:CurrentClockSpeed)) + " Mghz","Desde WMI")
        MsgInfo("
la Velocidad Màxima del Procesador es: "+Alltrim(cValtoChar(oDatos:MaxClockSpeed)) + " Mghz","Desde WMI")

NEXT


FOR EACH oDatos IN oJbs
        MsgInfo("
El Tipo de la MotherBoard es: "+Alltrim(cValtoChar(oDatos:Product)),"Desde WMI")
        MsgInfo("
El Número de Serie de la MotherBoard es: "+Alltrim(cValtoChar(oDatos:SerialNumber)),"Desde WMI")
NEXT

FOR EACH oDatos IN oIPSet
  MsgInfo("
El IPAddress es: "  + Alltrim(cValtoChar(oDatos:IPAddress(0))), "Desde WMI")
  MsgInfo("
El MacAddress es: "  + Alltrim(cValtoChar(oDatos:IPAddress(1))), "Desde WMI")
NEXT

FOR EACH oDatos IN oList
    If oDatos:PartOfDomain
       MsgInfo("
Dominio: " + oDatos:Domain, "Desde WMI")
      Else
       MsgInfo("
Grupo de Trabajo: " + oDatos:Domain, "Desde WMI")
    EndIf
Next

Return nil

User avatar
Willi Quintana
 
Posts: 1019
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: IP, Mac Address, Name desde mi modem

Postby cmsoft » Sat Jun 22, 2024 9:53 pm

Francisco, se que no es exactamente lo que estas buscando, pero tal vez pueda ser una convinacion del comando ARP con otros

Te dejo algo que estuve probando para este caso, es algo simple, pero es una punta
Code: Select all  Expand view

#include "FiveWin.ch"
FUNCTION Main()
    LOCAL aData, cOutput

    // Ejecuta el comando ARP para obtener la tabla ARP
    memowrit( 'ips.bat', "arp -a > ips.txt" )
    WaitRun( 'ips.bat' , 0 )    
    cOutput := MemoRead(".\ips.txt")
    aData := hb_ATokens(cOutput, chr(10))
    xbrowse(aData)
 
RETURN NIL
User avatar
cmsoft
 
Posts: 1290
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: IP, Mac Address, Name desde mi modem

Postby FranciscoA » Sat Jun 22, 2024 10:46 pm

Willi, muchas gracias.

FOR EACH oDatos IN oIPSet
MsgInfo("El IPAddress es: " + Alltrim(cValtoChar(oDatos:IPAddress(0))), "Desde WMI")
MsgInfo("El MacAddress es: " + Alltrim(cValtoChar(oDatos:IPAddress(1))), "Desde WMI")
NEXT


El codigo funciona, pero... siempre los peros... el resultado es del equipo local. La IP está ok, pero la MAC es diferente a la que muestra arp -a.

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2158
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: IP, Mac Address, Name desde mi modem

Postby FranciscoA » Sat Jun 22, 2024 10:49 pm

Hola César.
Precisamente hasta ahí he llegado, usando arp -a

Muchas gracias.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2158
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: IP, Mac Address, Name desde mi modem

Postby cmsoft » Sat Jun 22, 2024 10:56 pm

Francisco
Aca usando un poco de una pagina que te indica cual es el fabricante del dispositivo, tal vez te sirva un poco mas
Code: Select all  Expand view

#include "FiveWin.ch"

FUNCTION Main()
    LOCAL oWnd, oBrw, aData, cOutput

    // Ejecuta el comando ARP para obtener la tabla ARP
    memowrit( 'ips.bat', "arp -a > ips.txt" )
    WaitRun( 'ips.bat' , 0 )    
    cOutput := MemoRead(".\ips.txt")
    aData := hb_ATokens(cOutput, chr(10))    
    ADEL(aData,1)
    ADEL(aData,1)
    ADEL(aData,1)
    aData := Separar(aData)
    aData := Verifica(aData)
    xbrowse(aData)
RETURN NIL

STATIC FUNCTION Separar(aData)
LOCAL aData1 := {},  aData2 := {}, cText, i, j := 1
FOR i := 1 TO LEN(aData)
    cText := aData[i]    
    if !empty(cText)        
        AADD(aData1,{ALLTRIM(LEFT(cText,17)),ALLTRIM(SUBSTR(cText,18,25)),ALLTRIM(RIGHT(cText,12))})
    endif    
NEXT i
FOR i := 1 TO LEN(aData1)
    IF( aData1[i,1] > '192' .OR. aData1[i,2] = 'ff-ff-ff-ff-ff-ff')
       LOOP
    ENDIF
    AADD(aData2,{aData1[i,1],aData1[i,2],aData1[i,3],'https://aruljohn.com/mac/'+STRTRAN(aData1[i,2],'-','')})
NEXT i
RETURN aData2    

STATIC FUNCTION Verifica(aData)
LOCAL cText, i , cResult
FOR i := 1 TO LEN(aData)
    cText := WebPageContents(ALLTRIM(aData[i,4]))
    cResult := SUBSTR(cText,At('<tr><td>Vendor</td><td><span id="vdr14999879">',cText)+46,200 )    
    cResult := LEFT(cResult,At('</span>',cResult)-1)
    aData[i,4] := cResult
NEXT i    
RETURN aData
 


Esta medio poco eficiente el codigo, pero en mi caso me funciono con los dispostivos que tengo conectados en casa
Image
Es muy parecido a lo que me da el producto IP Scanner
Image
Creo que lo que no me da es mi PC, porque hago el ipconfig y yo tengo la ip que falta
El lunes puedo probar en el trabajo a ver que me tira
Espero que al menos te de una punta
Saludos
User avatar
cmsoft
 
Posts: 1290
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 31 guests