winterminute
asked on
How To Get The MAC Addres From an IP Address or Computername inside a Webservice
I am writing a webservice which takes in a MAC address, IP addres, or computername. I check the string and convert IP or Computername to the MAC address.
For IP address, I tried to spawn an EXE (NBTSTAT -a IP_Address) so I could parse the output.
For computername, I was going to ping to get the IP address and then do the above step.
However, calling an EXE from a webservice doesn't seem to be as easy as doing it from a console app.
i.e. The code executes but there is nothing being sent to standard output and no error.
What would be the best way to accomplish this?
Call an EXE from a webservice?
Or, is there something in the C# library that will allow me to turn a computername or an IP address into a MAC address?
Thanks!
For IP address, I tried to spawn an EXE (NBTSTAT -a IP_Address) so I could parse the output.
For computername, I was going to ping to get the IP address and then do the above step.
However, calling an EXE from a webservice doesn't seem to be as easy as doing it from a console app.
i.e. The code executes but there is nothing being sent to standard output and no error.
What would be the best way to accomplish this?
Call an EXE from a webservice?
Or, is there something in the C# library that will allow me to turn a computername or an IP address into a MAC address?
Thanks!
ASKER
Nope, I am using an application which requires me to work with MAC addresses, but rather than force users to know their MAC address, I'll take a computer name or IP address and work from there.
Well, on Windows you can get the MAC address for your OWN machine through a NETBIOS call.
For the flavor of this, here's a VB example that you might be able to adapt to C#:
http://custom.programming-in.net/articles/art9-1.asp?f=HeapAlloc
Here's another thing you might look at:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/getadaptersinfo.asp
http://msdn.microsoft.com/library/en-us/iphlp/iphlp/ip_adapter_info.asp?frame=true
For the flavor of this, here's a VB example that you might be able to adapt to C#:
http://custom.programming-in.net/articles/art9-1.asp?f=HeapAlloc
Here's another thing you might look at:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/getadaptersinfo.asp
http://msdn.microsoft.com/library/en-us/iphlp/iphlp/ip_adapter_info.asp?frame=true
I see where you're going with this. You want to do an arp -a programmatically. This is what you want:
http://www.codeguru.com/Cpp/I-N/internet/internetprotocolip/article.php/c6153/
http://www.codeguru.com/Cpp/I-N/internet/internetprotocolip/article.php/c6153/
ASKER
Yeah, so can you translate that into C#?
More:
http://www.codeguru.com/Cpp/I-N/network/basicnetworkoperations/article.php/c6861/
Unfortunately you'll have to adapt it to C#, or link in some C++.
http://www.codeguru.com/Cpp/I-N/network/basicnetworkoperations/article.php/c6861/
Unfortunately you'll have to adapt it to C#, or link in some C++.
No, but now that you have the C++ code, it may be that someone else can contribute the translation, or strategy to use the C++ module from you C# program . . .
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
I think that System.Net.Dns has something for me.
GetHostByAddress and GetHostByName both return a "System.Net.IPHostEntry" instance.
I looked through that object and didn't see the MAC address listed, but I am still looking....
GetHostByAddress and GetHostByName both return a "System.Net.IPHostEntry" instance.
I looked through that object and didn't see the MAC address listed, but I am still looking....
There you go -- see what int_20h sez.
ASKER
int_20h >> There doesn't seem to be a parse method for IPAddress?
From the doc, there is a parse method in IPAddress:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemNetIPAddressClassParseTopic.asp
Are you using .NET Framework 1.1?
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemNetIPAddressClassParseTopic.asp
Are you using .NET Framework 1.1?
ASKER
Yes, I am using 1.1. Let me look into that article...
ASKER
int_20h >> That worked perfectly! Thanks! I already awarded the points, but if you can point me two a web resources which talks more about the System.Net namespace and the various objects, I woudl appercaite it.
If not, thanks again for your help!
If not, thanks again for your help!
Glad you found that C# code for SendARP!
Thanks winterminute! Here is a URL that has lots of Networking articles you might want to read!
http://www.c-sharpcorner.com/Networking.asp
Enjoy!!!
http://www.c-sharpcorner.com/Networking.asp
Enjoy!!!
An other way is WMI. This is a snippet (I hope understandable):
ManagementPath path = new ManagementPath("\\\\" + "xxx.xxx.xxx.xxx" + "\\root\\cimv2");
ConnectionOptions opt = new ConnectionOptions();
opt.Username = txtUser.Text;
opt.Password = txtPassword.Text;
System.Management.Manageme ntScope mstest = new ManagementScope(path, opt);
System.Management.Manageme ntScope ms = new ManagementScope(path, opt);
ms.Options.EnablePrivilege s = true;
for(int i = 0; i <= 16; i++)
{
string queryMAC = "select MACAddress, description from Win32_NetworkAdapter where Manufacturer <> 'Microsoft' and Manufacturer <> NULL and DeviceID=" + "'" + i + "'";
System.Management.ObjectQu ery oqMAC = new ObjectQuery(queryMAC);
ManagementObjectSearcher query1MAC = new ManagementObjectSearcher(m s, oqMAC) ;
ManagementObjectCollection queryCollection1MAC = query1MAC.Get();
foreach(ManagementObject mo in queryCollection1MAC)
{
if(mo["MACAddress"] == null)
{}
else
{
mac = mo["MACAddress"].ToString( );
nic = mo["description"].ToString ();
item.SubItems.Add(mac);
item.SubItems.Add(nic);
}
Cursor.Current = Cursors.WaitCursor;
}
}
}
ManagementPath path = new ManagementPath("\\\\" + "xxx.xxx.xxx.xxx" + "\\root\\cimv2");
ConnectionOptions opt = new ConnectionOptions();
opt.Username = txtUser.Text;
opt.Password = txtPassword.Text;
System.Management.Manageme
System.Management.Manageme
ms.Options.EnablePrivilege
for(int i = 0; i <= 16; i++)
{
string queryMAC = "select MACAddress, description from Win32_NetworkAdapter where Manufacturer <> 'Microsoft' and Manufacturer <> NULL and DeviceID=" + "'" + i + "'";
System.Management.ObjectQu
ManagementObjectSearcher query1MAC = new ManagementObjectSearcher(m
ManagementObjectCollection
foreach(ManagementObject mo in queryCollection1MAC)
{
if(mo["MACAddress"] == null)
{}
else
{
mac = mo["MACAddress"].ToString(
nic = mo["description"].ToString
item.SubItems.Add(mac);
item.SubItems.Add(nic);
}
Cursor.Current = Cursors.WaitCursor;
}
}
}
Also: One IP address can have multiple Mac addresses if the machines are clustered or there's load distribution hardware in front of the machine.