Jugando un poco más con la respuesta que ofrecí en esta pregunta. Ver respuesta anterior.
Se me ocurrió darle una vuelta de rosca a dicha función para armar un array multi con más información de las PCs de una LAN.
La función devolverá un array de tres dimensiones retornando el nombre del equipo, su dirección IP y su dirección MAC, la cual es super sencilla de entender y como se verá no tiene ningún misterio, sólo se usan comando de la consola de Windows. (Para su uso quitar los MsgInfo() ya que los dejé para que se pueda visualizar fácilmente la idea.)
- Code: Select all Expand view
// DETALLE DE PCS DE UNA RED //
Function FullNetView()
Local aPCs,Q,cTexto,nLinea,cIP,cLinea,cMac
aPcs:={}
WAITRUN( "cmd.exe /c net view > C:\PCs.txt" , .f.)
cTexto :=MEMOREAD("C:\PCs.txt")
nLinea :=MLCOUNT(cTexto)
FOR Q=4 TO nLinea
cLinea:=MEMOLINE(cTexto,255,Q)
IF LEFT(clinea,2)="\\"
AADD(aPCs,{ALLTRIM(LEFT(cLinea,23)),"",""})
ENDIF
NEXT
FOR Q=1 TO LEN(aPCs)
WAITRUN( "cmd.exe /c ping -n 1 -4 "+RIGHT(aPCs[Q][1],LEN(aPCs[Q][1])-2)+" > C:\PING.txt" , .f.)
cTexto :=MEMOREAD("C:\PING.txt")
nLinea :=MLCOUNT(cTexto)
cLinea :=MEMOLINE(cTexto,255,5)
cIP :=RIGHT(ALLTRIM(cLinea),LEN(ALLTRIM(cLinea))-RAT(" ",ALLTRIM(cLinea)))
cIP :=LEFT(cIP,LEN(ALLTRIM(cIP))-1)
aPcs[Q][2]:=cIP
WAITRUN( "cmd.exe /c arp -a "+cIP+" > C:\ARP.txt" , .f.)
cTexto :=MEMOREAD("C:\ARP.txt")
nLinea :=MLCOUNT(cTexto)
cLinea :=MEMOLINE(cTexto,255,4)
cMac :=SUBSTR(cLinea,25,17)
aPcs[Q][3]:=cMac
MsgInfo("EQUIPO: "+aPcs[Q][1]+CHR(13)+;
"IP: "+aPcs[Q][2]+CHR(13)+;
"MAC: "+aPcs[Q][3],"Detalle del equipo")
NEXT
fErase("C:\PCs.txt")
fErase("C:\Ping.txt")
fErase("C:\ARP.txt")
Return aPCs
//
El uso que se le de a la función dependerá del consumidor... pero me pareció buena idea escribirla y compartirla con el foro.
Espero sea de utilidad.
Saludos a todos!