473,396 Members | 1,832 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,396 software developers and data experts.

How to retrieve clients MAC address?

Hello,
i can't figure out how to retrieve clients MAC address using C#.NET.
I can get IP but not MAC.

Thanks in advance.

Gidraz
Jul 21 '05 #1
5 16503
maybe you can use the IP with this:
http://www.ripe.net/perl/whois?form_..._search=Search

"Gidraz" <gi**************@saikas.lt> wrote in message
news:OW**************@TK2MSFTNGP14.phx.gbl...
Hello,
i can't figure out how to retrieve clients MAC address using C#.NET.
I can get IP but not MAC.

Thanks in advance.

Gidraz

Jul 21 '05 #2
First 2 results on a Google search for: retrieve MAC address c#

http://www.codeproject.com/useritems...in_Network.asp

http://www.developersdex.com/gurus/code/223.asp

Gidraz wrote:
Hello,
i can't figure out how to retrieve clients MAC address using C#.NET.
I can get IP but not MAC.

Thanks in advance.

Gidraz

Jul 21 '05 #3
Hi,
I have WEB app. I want to retrieve clients MAC adress. ActiveX not working
properly.
I can't use some Windows app.

"Joshua Flanagan" <jo**@msnews.com> wrote in message
news:eb**************@TK2MSFTNGP09.phx.gbl...
First 2 results on a Google search for: retrieve MAC address c#

http://www.codeproject.com/useritems...in_Network.asp

http://www.developersdex.com/gurus/code/223.asp

Gidraz wrote:
Hello,
i can't figure out how to retrieve clients MAC address using C#.NET.
I can get IP but not MAC.

Thanks in advance.

Gidraz

Jul 21 '05 #4
If you ping the IP addresss, then the MAC address for that IP will be
stored in an ARP table on your machine. You can see this by typing
"ARP -a" at a command prompt. You can access this table through an API
call to GetIPNetTable() in the IpHlpApi.dll. I'm not sure if the
IP-MAC address will be on your server if someone hits your web
application, but if it's not you can just ping the IP address since you
do have that information and then the MAC should be in the ARP table on
your machine. Here is the C# code needed to pull the MAC out of the
table by IP address.

//Setup
#region GetIpNetTable interop
// The max number of physical addresses.
const int MAXLEN_PHYSADDR = 8;

// Define the MIB_IPNETROW structure.
[StructLayout(LayoutKind.Sequential)]
struct MIB_IPNETROW
{
[MarshalAs(UnmanagedType.U4)]
public int dwIndex;
[MarshalAs(UnmanagedType.U4)]
public int dwPhysAddrLen;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MAXLEN_PHYSADDR)]
public byte[] bPhysAddr;
[MarshalAs(UnmanagedType.U4)]
public int dwAddr;
[MarshalAs(UnmanagedType.U4)]
public int dwType;
}

// Declare the GetIpNetTable function.
[DllImport("IpHlpApi.dll")]
[return: MarshalAs(UnmanagedType.U4)]
static extern int GetIpNetTable(
IntPtr pIpNetTable,
[MarshalAs(UnmanagedType.U4)]
ref int pdwSize,
bool bOrder);

// The insufficient buffer error.
const int ERROR_INSUFFICIENT_BUFFER = 122;

#endregion

/// <summary>
/// Pulls the MAC address for a given IP address out of the ARP table
on the machine executing this code.
/// </summary>
/// <param name="ip">IP address to lookup</param>
/// <returns>The MAC address for the given IP address or null if the
MAC is not found.</returns>
public string ResolveMAC(string ip)
{
// The number of bytes needed.
int bytesNeeded = 0;

// The result from the API call.
int result = GetIpNetTable(IntPtr.Zero, ref bytesNeeded, false);

// Call the function, expecting an insufficient buffer.
if (result != ERROR_INSUFFICIENT_BUFFER)
{
// Throw an exception.
throw new Win32Exception(result);
}

// Allocate the memory, do it in a try/finally block, to ensure
// that it is released.
IntPtr buffer = IntPtr.Zero;

try
{
// Allocate the memory.
buffer = Marshal.AllocCoTaskMem(bytesNeeded);

// Make the call again. If it did not succeed, then
// raise an error.
result = GetIpNetTable(buffer, ref bytesNeeded, false);

// If the result is not 0 (no error), then throw an exception.
if (result != 0)
{
// Throw an exception.
throw new Win32Exception(result);
}

// Now we have the buffer, we have to marshal it. We can read
// the first 4 bytes to get the length of the buffer.
int entries = Marshal.ReadInt32(buffer);

// Increment the memory pointer by the size of the int.
IntPtr currentBuffer = new IntPtr(buffer.ToInt64() +
Marshal.SizeOf(new int()));

// Allocate an array of entries.
MIB_IPNETROW[] table = new MIB_IPNETROW[entries];

// Cycle through the entries.
for (int index = 0; index < entries; index++)
{
// Call PtrToStructure, getting the structure information.
table[index] = (MIB_IPNETROW) Marshal.PtrToStructure(new
IntPtr(currentBuffer.ToInt64() + (index *
Marshal.SizeOf(typeof(MIB_IPNETROW)))), typeof(MIB_IPNETROW));
}

byte[] macBytes = null;
for (int i = 0; i < entries; i++)
{
string tableIP = String.Format("{0}.{1}.{2}.{3}",
table[i].dwAddr & 0x000000ff,
(table[i].dwAddr & 0x0000ff00) >> 8,
(table[i].dwAddr & 0x00ff0000) >> 16,
(table[i].dwAddr & 0xff000000) >> 24);

if(tableIP == ip)
{
macBytes = table[i].bPhysAddr;
break;
}
}

string mac = "";

for(int i = 0; i < 6; i++)
{
string hexTet = macBytes[i].ToString("X", new NumberFormatInfo());

if(hexTet.Length == 1)
{
hexTet = "0" + hexTet;
}

mac += hexTet;

if(i < 5)
{
mac += ":";
}

}

return mac;
}
catch
{
return null;
}
finally
{
// Release the memory.
Marshal.FreeCoTaskMem(buffer);
}
}

Jul 21 '05 #5
I wasn't suggesting you use a windows app. I was suggesting you read
those articles and their source code to see how they retrieve the MAC
address. The second article shows hot to do it using WMI.
I'm sure both articles include code that could be used from a web
application.

Gidraz wrote:
Hi,
I have WEB app. I want to retrieve clients MAC adress. ActiveX not working
properly.
I can't use some Windows app.

"Joshua Flanagan" <jo**@msnews.com> wrote in message
news:eb**************@TK2MSFTNGP09.phx.gbl...
First 2 results on a Google search for: retrieve MAC address c#

http://www.codeproject.com/useritems...in_Network.asp

http://www.developersdex.com/gurus/code/223.asp

Gidraz wrote:
Hello,
i can't figure out how to retrieve clients MAC address using C#.NET.
I can get IP but not MAC.

Thanks in advance.

Gidraz


Jul 21 '05 #6

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

6
by: Miguel Orrego | last post by:
Hi, I have found some code that authenticates users agains a domain using ADSI. I then redirect to another page and pass the username they have entered as a string. However, it would be nice to...
3
by: serge calderara | last post by:
Dear all, I have a tool which is able to receive any kind of data from a remote system. For that I need to get the ipadress of the remote system. If the system is not connected to a DHCP...
0
by: GoCMS | last post by:
Sorry for the duplicate posting, but I tried to cross_post from adsi.general board, and it didn't work. :( Here's my question: I'm using windows 2000, and integrated windows authentication for...
0
by: rey17 | last post by:
hi i'm working on a project and my application will be running on pocket pc(i'm using .NET CF). basically my application should be able to retrieve my pocket's ipv6 address (it's the link-local...
1
by: Vinny Vinn | last post by:
Using C#,What is the simplest way of retrieving the ip address of the local machine? Thanks
5
by: Gidraz | last post by:
Hello, i can't figure out how to retrieve clients MAC address using C#.NET. I can get IP but not MAC. Thanks in advance. Gidraz
8
by: frizzle | last post by:
Hi there, I'm saving ip addresses of blocked visitors into a mySQL DB. The function with wich i retrieve the address is below this message. What i wonder is, if it's ok to remove the dots from...
2
by: Noro | last post by:
Hi All, When I try to get the email address of the current user, I retrieve a string like this that represents the email address: /o=ORGANIZATION/ou=Sede/cn=Recipients/cn=USERNAME What can...
4
by: kang jia | last post by:
hi i am doing mailinglist currently. the code in my first page is like this : : <html> <head> <link rel="stylesheet" type="text/css" href="gallery.css" /> <script language="JavaScript"> ...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.