日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

c语言 通过sendarp 实现mac,C#通过SendARP()获取WinCE设备的Mac网卡物理地址

發布時間:2023/12/15 C# 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言 通过sendarp 实现mac,C#通过SendARP()获取WinCE设备的Mac网卡物理地址 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ARP(Address Resolution Protocol) 即 地址解析協議,是根據IP地址獲取物理地址的一個TCP/IP協議。

SendARP(Int32 dest, Int32 host, out Int64 mac, out Int32 length)

①dest:訪問的目標IP地址,既然獲取本機網卡地址,寫本機IP即可 這個地址比較特殊,必須從十進制點分地址轉換成32位有符號整數 ?在C#中為Int32;

②host:源IP地址,即時發送者的IP地址,這里可以隨便填寫,填寫Int32整數即可;

③mac:返回的目標MAC地址(十進制),我們將其轉換成16進制后即是想要的結果用out參數加以接收;

④length:返回的是pMacAddr目標MAC地址(十進制)的長度,用out參數加以接收。

如果使用的是C++或者C語言可以直接調用 inet_addr("192.168.0.×××")得到?參數dest 是關鍵

現在用C#來獲取,首先需要導入"ws2_32.dll"這個庫,這個庫中存在inet_addr(string cp)這個方法,之后我們就可以調用它了。

//首先,要引入命名空間:using System.Runtime.InteropServices;

1 using System.Runtime.InteropServices;

//接下來導入C:\Windows\System32下的"ws2_32.dll"動態鏈接庫,先去文件夾中搜索一下,文件夾中沒有Iphlpapi.dll的在下面下載

2 [DllImport("ws2_32.dll")]

3 private static extern int inet_addr(string ip);//聲明方法

Iphlpapi.dll的點擊 這里 下載

//第二 調用方法

Int32 desc = inet_addr("192.168.0.××");

/*由于個別WinCE設備是不支持"ws2_32.dll"動態庫的,所以我們需要自己實現inet_addr()方法

輸入是點分的IP地址格式(如A.B.C.D)的字符串,從該字符串中提取出每一部分,為int,假設得到4個int型的A,B,C,D,

,IP = D<<24 + C<<16 + B<<8 + A(網絡字節序),即inet_addr(string ip)的返回結果,

我們也可以把該IP轉換為主機字節序的結果,轉換方法一樣 A<<24 + B<<16 + C<<8 + D

*/

接下來是完整代碼

using System;

using System.Runtime.InteropServices;

using System.Net;

using System.Diagnostics;

using System.Net.Sockets;

public class MacAddressDevice

{

[DllImport("Iphlpapi.dll")]

private static extern int SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int32 length);

//獲取本機的IP

public static byte[] GetLocalIP()

{

//得到本機的主機名

string strHostName = Dns.GetHostName();

try

{

//取得本機所有IP(IPV4 IPV6 ...)

IPAddress[] ipAddress = Dns.GetHostEntry(strHostName).AddressList;

byte[] host = null;

foreach (var ip in ipAddress)

{

while (ip.GetAddressBytes().Length == 4)

{

host = ip.GetAddressBytes();

break;

}

if (host != null)

break;

}

return host;

}

catch (Exception)

{

return null;

}

}

// 獲取本地主機MAC地址

public static string GetLocalMac(byte[] ip)

{

if(ip == null)

return null;

int host = (int)((ip[0]) + (ip[1] << 8) + (ip[2] << 16) + (ip[3] << 24));

try

{

Int64 macInfo = 0;

Int32 len = 0;

int res = SendARP(host, 0, out macInfo, out len);

return Convert.ToString(macInfo, 16);

}

catch (Exception err)

{

Console.WriteLine("Error:{0}", err.Message);

}

return null;

}

}

}

最終取得Mac地址

//本機Mac地址

string Mac = GetLocalMac(GetLocalIP());

//得到Mac地址是小寫的,或者前后次序顛倒的,自己轉換為正常的即可。

總結

以上是生活随笔為你收集整理的c语言 通过sendarp 实现mac,C#通过SendARP()获取WinCE设备的Mac网卡物理地址的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。