PDA

Click to See Complete Forum and Search --> : How do I obtain an IP Address using the MAC ID??


Fleck
Feb 7th, 2003, 08:31 AM
I am trying to write some code that will allow me to connect a machine and then using its MAC ID Address, and try to get its IP address and connect to it just using the Media Access Control ID (MAC ID). Please help!!!!

radum
Feb 7th, 2003, 10:43 PM
can you be more specific - do you already have the mac address and you need to parse the ip address out of it? are you sure you need that computer's ip address even if it is a 192.168.0.x or a 10.x.x.x? because you may be actually more interrested in the router's ip...

Fleck
Feb 8th, 2003, 04:10 PM
Yes I always have the MAC ID, and only the MAC ID. I would just like to parce the IP Address from the MAC ID.. Right now through my code I can get the MAC ID, Port #, Name etc. using winsock, but I would just like to use the MAC ID , and connect and then obtain the IP address through code. Any help would be greatly appreciated. Thx...

radum
Feb 8th, 2003, 11:11 PM
here's a piece of code from msdn that would let you get the ip address of the current computer. i hope your question is actually referring to getting the ip of the computer that runs your app, not the ip of the other computer youre connected to... good luck.

r





Start a new project in Visual Basic. Form1 is created by default.


Place a CommandButton, Command1, on Form1.


Place the following code in the General Declarations section of Form1:



Private Const WS_VERSION_REQD = &H101
Private Const WS_VERSION_MAJOR = WS_VERSION_REQD \ &H100 And &HFF&
Private Const WS_VERSION_MINOR = WS_VERSION_REQD And &HFF&
Private Const MIN_SOCKETS_REQD = 1
Private Const SOCKET_ERROR = -1
Private Const WSADescription_Len = 256
Private Const WSASYS_Status_Len = 128

Private Type HOSTENT
hName As Long
hAliases As Long
hAddrType As Integer
hLength As Integer
hAddrList As Long
End Type

Private Type WSADATA
wversion As Integer
wHighVersion As Integer
szDescription(0 To WSADescription_Len) As Byte
szSystemStatus(0 To WSASYS_Status_Len) As Byte
iMaxSockets As Integer
iMaxUdpDg As Integer
lpszVendorInfo As Long
End Type

Private Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As Long
Private Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal _
wVersionRequired as Integer, lpWSAData As WSADATA) As Long
Private Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long

Private Declare Function gethostname Lib "WSOCK32.DLL" (ByVal hostname$,_
ByVal HostLen as Long) as long
Private Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal _
hostname$) As Long
Private Declare Sub RtlMoveMemory Lib "KERNEL32" (hpvDest As Any, ByVal_
hpvSource&, ByVal cbCopy&)

Function hibyte(ByVal wParam As Integer)

hibyte = wParam \ &H100 And &HFF&

End Function

Function lobyte(ByVal wParam As Integer)

lobyte = wParam And &HFF&

End Function

Sub SocketsInitialize()
Dim WSAD As WSADATA
Dim iReturn As Integer
Dim sLowByte As String, sHighByte As String, sMsg As String

iReturn = WSAStartup(WS_VERSION_REQD, WSAD)

If iReturn <> 0 Then
MsgBox "Winsock.dll is not responding."
End
End If

If lobyte(WSAD.wversion) <WS_VERSION_MAJOR Or (lobyte(WSAD.wversion) = _
WS_VERSION_MAJOR And hibyte(WSAD.wversion) < WS_VERSION_MINOR) Then

sHighByte = Trim$(Str$(hibyte(WSAD.wversion)))
sLowByte = Trim$(Str$(lobyte(WSAD.wversion)))
sMsg = "Windows Sockets version " & sLowByte & "." & sHighByte
sMsg = sMsg & " is not supported by winsock.dll "
MsgBox sMsg
End
End If

'iMaxSockets is not used in winsock 2. So the following check is only
'necessary for winsock 1. If winsock 2 is requested,
'the following check can be skipped.

If WSAD.iMaxSockets < MIN_SOCKETS_REQD Then
sMsg = "This application requires a minimum of "
sMsg = sMsg & Trim$(Str$(MIN_SOCKETS_REQD)) & " supported sockets."
MsgBox sMsg
End
End If

End Sub

Sub SocketsCleanup()
Dim lReturn As Long

lReturn = WSACleanup()

If lReturn <> 0 Then
MsgBox "Socket error " & Trim$(Str$(lReturn)) & " occurred in Cleanup "
End
End If

End Sub

Sub Form_Load()

SocketsInitialize

End Sub

Private Sub Form_Unload(Cancel As Integer)

SocketsCleanup

End Sub

Private Sub Command1_click()
Dim hostname As String * 256
Dim hostent_addr As Long
Dim host As HOSTENT
Dim hostip_addr As Long
Dim temp_ip_address() As Byte
Dim i As Integer
Dim ip_address As String

If gethostname(hostname, 256) = SOCKET_ERROR Then
MsgBox "Windows Sockets error " & Str(WSAGetLastError())
Exit Sub
Else
hostname = Trim$(hostname)
End If

hostent_addr = gethostbyname(hostname)

If hostent_addr = 0 Then
MsgBox "Winsock.dll is not responding."
Exit Sub
End If

RtlMoveMemory host, hostent_addr, LenB(host)
RtlMoveMemory hostip_addr, host.hAddrList, 4

MsgBox hostname

'get all of the IP address if machine is multi-homed

Do
ReDim temp_ip_address(1 To host.hLength)
RtlMoveMemory temp_ip_address(1), hostip_addr, host.hLength

For i = 1 To host.hLength
ip_address = ip_address & temp_ip_address(i) & "."
Next
ip_address = Mid$(ip_address, 1, Len(ip_address) - 1)

MsgBox ip_address

ip_address = ""
host.hAddrList = host.hAddrList + LenB(host.hAddrList)
RtlMoveMemory hostip_addr, host.hAddrList, 4
Loop While (hostip_addr <> 0)

End Sub



Press the F5 key to run the project.


Click Command1 to obtain the host information.

Fleck
Feb 10th, 2003, 08:37 AM
Sorry I did not make myself clear. What I want to do is connect a machine to say my laptop via hub, or xover cable then by using its MAC ID (MAC ID for REMOTE machine) I want to be able to obtain its IP address once connected via its MAC ID. The code I have written already allows me to get the HOST info, and the remote info using Winsock, but the IP Address must be given for the winsock to connect. I can get the MAC ID through my code once connected, but I want to get it the other way around if possible. I would like to give the MAC ID then get the IP address. My PC will always be the host, and will be running my App, just to connect to the remote. I am not sure if this is a problem or not. Thanks

Fleck

radum
Feb 10th, 2003, 12:46 PM
as long as you have the connection already established, you can 'ask' your peer (sending it some kind of command over tcp) to send you back its ip address. the peer would run a small piece of code like the one that i sent to you. if this is not an option, i would suggest to try to look and see how can you get some hooks to the windows arp (address resolution protocol). it seems weird to me that you are able to establish a tcp connection with a remote host without knowing its ip address though...

Fleck
Feb 10th, 2003, 02:03 PM
See I just want to; say put the MAC ID in a text box, or input box, and then from that connect to the remote machine and then from that decipher its IP Address from that conncection. in other words just get the IP address using the MAC ID to connect if possible.... Thanks Again....