Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Come leggere da vba l'Ip address macchina, scheda lan che sta usando nella rete locale?

337 views
Skip to first unread message

RobertoA

unread,
Jul 19, 2021, 11:58:20 AM7/19/21
to
Credo sia un problema abbastanza comune recuperare via vba l'ip del pc
ed ottenere quello di altra scheda rete installata sul pc
Attualmente uso questo codice
----------------------------
Function GetIP() As String
Dim IP$, DNS$, host$, X As Integer
Dim GetComputer As String
Dim Result%
Dim LoBy%, HiBy%
Dim SocketData As WinSocketDataType

Result = WSAStartup(&H101, SocketData)
If Result <> 0 Then
MsgBox "Errore in winsock.dll", , "WINSOCK ERROR"
End If

X = 2
nt:
IP = HostByName$(GetComputer, X)

If Len(IP) = 0 And X >= 0 Then
X = X - 1
GoTo nt
End If

GetIP = IP
CleanSockets
End Function
---------------------------
Function HostByName(name$, Optional X% = 0) As String
Dim MemIp() As Byte
Dim Y%
Dim HostDeAddress&, HostIp&
Dim IpAddress$
Dim host As HostDeType
HostDeAddress = gethostbyname(name)
If HostDeAddress = 0 Then
HostByName = ""
Exit Function
End If
Call RtlMoveMemory(host, HostDeAddress, LenB(host))
For Y = 0 To X
Call RtlMoveMemory(HostIp, host.hAddrList + 4 * Y, 4)
If HostIp = 0 Then
HostByName = ""
Exit Function
End If
Next Y
ReDim MemIp(1 To host.hLength)
Call RtlMoveMemory(MemIp(1), HostIp, host.hLength)
IpAddress = ""
For Y = 1 To host.hLength
IpAddress = IpAddress & MemIp(Y) & "."
Next Y
HostByName = Left$(IpAddress, Len(IpAddress) - 1)
End Function
---------------------------

e puntualmente il 50% delle volte mi restituisce un indirizzo che non e'
quello della scheda lan usata per collegare il pc in rete
Ad esempio, il pc e' collegato in lan con la scheda rete il cui
indirizzo e' 192.168.1.100 e la routine sopra restituisce 192.168.244.1
Quest'ultima e' effettivamente una scheda rete che esiste nel pc, ma non
e' quella usata per connettere il pc in lan
Quindi la domanda e': come leggere l'indirizzo ip scheda rete in uso
attualmente per collegare il pc in lan?
Quel "..scheda rete in uso attualmente.." come si traduce al picci?

caezan

unread,
Jul 21, 2021, 6:22:41 AM7/21/21
to
> e puntualmente il 50% delle volte mi restituisce un indirizzo che non e'
> quello della scheda lan usata per collegare il pc in rete
> Ad esempio, il pc e' collegato in lan con la scheda rete il cui
> indirizzo e' 192.168.1.100 e la routine sopra restituisce 192.168.244.1
> Quest'ultima e' effettivamente una scheda rete che esiste nel pc, ma non
> e' quella usata per connettere il pc in lan
> Quindi la domanda e': come leggere l'indirizzo ip scheda rete in uso
> attualmente per collegare il pc in lan?
> Quel "..scheda rete in uso attualmente.." come si traduce al picci?

Un metodo poco elegante è lanciare il comando IPCONFIG da VBA, per esempio:

Private Sub cmdRete_Click()
MsgBox CreateObject("WScript.Shell").exec("cmd /c ipconfig").StdOut.readall
End Sub

e poi con un po' di string matching, replace, ecc. ricavarsi l'indirizzo IP.

RobertoA

unread,
Jul 21, 2021, 6:28:11 AM7/21/21
to
Eh ma c'e' lo stesso problema di prima
Coll'ipconfig appaiono tutte le schede rete presenti nel picci
E qual'e' quella buona?
Dove per 'buona' si intenda quella che in questo momento collega il pc
col resto lan

caezan

unread,
Jul 21, 2021, 6:38:09 AM7/21/21
to
> >> Quindi la domanda e': come leggere l'indirizzo ip scheda rete in uso
> >> attualmente per collegare il pc in lan?
> >> Quel "..scheda rete in uso attualmente.." come si traduce al picci?
> > Un metodo poco elegante è lanciare il comando IPCONFIG da VBA, per esempio:
> > Private Sub cmdRete_Click()
> > MsgBox CreateObject("WScript.Shell").exec("cmd /c ipconfig").StdOut.readall
> > End Sub
> > e poi con un po' di string matching, replace, ecc. ricavarsi l'indirizzo IP.
> Eh ma c'e' lo stesso problema di prima
> Coll'ipconfig appaiono tutte le schede rete presenti nel picci
> E qual'e' quella buona?
> Dove per 'buona' si intenda quella che in questo momento collega il pc
> col resto lan

Prova prima con una RELEASE:
Private Sub cmdRete_Click()
MsgBox CreateObject("WScript.Shell").exec("cmd /c ipconfig /release").StdOut.readall

BFS

unread,
Jul 21, 2021, 8:17:35 AM7/21/21
to
ma fammi capire
nel pc hai due schede di rete
a)una connessa alla lan
b)una connessa a ?


stessa subnet?
della lan non sai nulla a priori?
tipo se è almeno 192.168.1.xxx

un ip del gateway o del sever?

BFS







RobertoA

unread,
Jul 21, 2021, 10:28:02 AM7/21/21
to
b) ed una non connessa
(ma l'indirizzo scheda rete si vede comunque)
Diversa subnet
Se sapessi a priori, non bisognerebbe 'leggerlo' il valore


BFS

unread,
Jul 22, 2021, 2:47:54 AM7/22/21
to
non mi torna
anche io ho due schede ethernet nel PC

le due ethernet :
una con 192.168.1.100
e una con 192.168.0.100 senza cavo collegato...quindi sconnessa

l'ip config per la seconda, quella senza cavo mi restituisce



Stato supporto. . . . . . . . . . . . : Supporto disconnesso

nella lista completa del ipconfig vedo l'ip solo di quella connessa


in ogni caso, anche se tu ne vedi due nel ip config, se una è sconnessa
non è pingabile
potresti quindi fare un ping per scartare quelle che non rispondono


BFS



RobertoA

unread,
Jul 23, 2021, 10:20:12 AM7/23/21
to
Prova a vedere su un pc che abbia HyperV attivo o credo anche VirtualBox
Ti ritrovi la scheda rete 'virtual' che usa l'ambiente di
virtualizzazione, e sono entrambe (la nic fisica e la nic virtuale)
'connesse'
E con che criterio il software prende l'una o l'altra?


BFS

unread,
Jul 23, 2021, 10:35:45 AM7/23/21
to
mio server
ho due schede di rete usate di 4
e una macchina virtuale su hyperview e ottengo:


Configurazione IP di Windows


Scheda Ethernet Embedded LOM 1 Port 4:

Stato supporto. . . . . . . . . . . . : Supporto disconnesso
Suffisso DNS specifico per connessione:

Scheda Ethernet Embedded LOM 1 Port 1:

Suffisso DNS specifico per connessione:
Indirizzo IPv4. . . . . . . . . . . . : 192.168.1.7
Subnet mask . . . . . . . . . . . . . : 255.255.255.0
Gateway predefinito . . . . . . . . . : 192.168.1.1

Scheda Ethernet Embedded LOM 1 Port 2:

Suffisso DNS specifico per connessione:
Indirizzo IPv6 locale rispetto al collegamento . : xxxxxxxxxxxxx
Indirizzo IPv4. . . . . . . . . . . . : 192.168.1.113
Subnet mask . . . . . . . . . . . . . : 255.255.255.0
Gateway predefinito . . . . . . . . . : 192.168.1.1

Scheda Ethernet Embedded LOM 1 Port 3:

Stato supporto. . . . . . . . . . . . : Supporto disconnesso
Suffisso DNS specifico per connessione:

Scheda Ethernet vEthernet (Generic USB-EEM Network Adapter - Virtual
Switch):

Suffisso DNS specifico per connessione:
Indirizzo IPv6 locale rispetto al collegamento . : xxxxxxxxx
Indirizzo IPv4. . . . . . . . . . . . : 192.168.1.198
Subnet mask . . . . . . . . . . . . . : 255.255.255.0
Gateway predefinito . . . . . . . . . : 192.168.1.1



in effetti quella usata da hyperview risulta connessa ma la distinguo
perchè è denominata in modo diverso

ma non so se dipenda dal server ho la denominazione diversa

quindi nel mio caso saprei quali sono i due ip connessi alla rete, il 7
finale e il 113 finale





RobertoA

unread,
Jul 23, 2021, 12:11:55 PM7/23/21
to
E quindi, volendo fare una routine generica che risponda con la nic che
collega il pc alla lan, che criterio indicheresti?


0 new messages