如何利用NetworkInterface获取服务器MAC地址

复制代码 代码示例:private void ButtonIP_Click(object sender, SystemEventArgs e)
{ SystemNetIPAddress[] addressList = DnsGetHostByName(DnsGetHostName())AddressList;
if ( addressListLength>1)
{ TextLIPText = addressList[0]ToString();
TextSIPText = addressList[1]ToString();}else{TextLIPText = addressList[0]ToString();
TextSIPText = "没有可用的连接";}}另一种获取服务器的IP地址与MAC地址的方法:
复制代码 代码示例:using SystemManagement;
string stringMAC = "";
string stringIP = "";
ManagementClass MC = new ManagementClass "Win32_NetworkAdapterConfiguration");
ManagementObjectCollection MOC= MCGetInstances();
foreach(ManagementObject MO in MOC){if ((bool)MO["IPEnabled"] == true){stringMAC += MO["MACAddress"]ToString();
TextMACText = stringMACToString();
string[] IPAddresses = (string[]) MO["IPAddress"];
if(IPAddressesLength > 0)
stringIP = IPAddresses[0];
TextIPText = stringIPToString();}}获取客户端本机的IP地址的方法:
复制代码 代码示例:using SystemNet;
TextIPText=PageRequestUserHostAddress;获取客户端本机的MAC地址刚复杂一些,需要调用两个API,用ARP协议获取,但也只能获取到同网段机器的MAC,对于跨网段的得利用IP扫描或cmd中nBTstat命令获取MAC地址。

1sqlserver2000
企业管理器
你的实例
管理
当前活动
进程信息
里面有所有当前连接的mac地址
2 查看
mastersysprocesses
其中
net_address
即mac地址
尝试过第二种方法是可行的。

例如A主机的IP地址为19216801,它现在需要与IP为19216808的主机(主机B)进行通讯,那么将进行以下动作:
A主机查询自己的ARP缓存列表,
如果发现具有对应于目的IP地址19216808的MAC地址项,则直接使用此MAC地址项构造并发送以太网数据包,如果没有发现对应的MAC地址项则继续下一步;
A主机发出ARP解析请求广播,目的MAC地址是FF:FF:FF:FF:FF:FF,请求IP为19216808的主机回复MAC地址;
B主机收到ARP解析请求广播后,回复给A主机一个ARP应答数据包,其中包含自己的IP地址和MAC地址;
A接收到B主机的ARP回复后,将B主机的MAC地址放入自己的ARP缓存列表,然后使用B主机的MAC地址作为目的MAC地址,B主机的IP地址(19216808)作为目的IP地址,
构造并发送以太网数据包;
如果A主机还要发送数据包给19216808,
由于在ARP缓存列表中已经具有IP地址19216808的MAC地址,所以A主机直接使用此MAC地址发送数据包,而不再发送ARP解析请求广播;当此缓存地址项超过两分钟没有活动(没有使用)后,此ARP缓存将超时被删除。
默认情况下ARP缓存的超时时限是两分钟,你可以在注册表中进行修改。可以修改的键值有两个,都位于
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
修改的键值:
键值1:ArpCacheLife,类型为Dword,单位为秒,默认值为120
键值2:ArpCacheMinReferencedLife,类型为Dword,单位为秒,默认值为600
注意:这些键值默认是不存在的,如果你想修改,必须自行创建;修改后重启计算机后生效。
如果ArpCacheLife的值比ArpCacheMinReferencedLife的值大,那么ARP缓存的超时时间设置为ArpCacheLife的值;如果ArpCacheLife的值不存在或者比ArpCacheMinReferencedLife的值小,那么对于未使用的ARP缓存,超时时间设置为120秒;对于正在使用的ARP缓存,超时时间则设置为ArpCacheMinReferencedLife的值。下图是我们的试验网络结构,ISA
Server作为一个边缘防火墙,内部局域网(19216800/24)通过ISA
Server接入Internet。在这个试验中,我将在ISA
Server上绑定内部客户True的IP地址19216808和MAC地址,这样,当True不在线时,另外一个内部客户Fake就算修改自己的IP地址为True的IP地址19216808,也不能通过ISA
Server来上网。
各计算机的TCP/IP设置如下,本次试验不涉及DNS解析,各服务器的DNS服务器设置为空,在试验之前已经确认了网络连接工作正常:
ISA
2004
Firewall:LAN
Interface:
IP:19216801/24
DG:None
MAC:00:03:47:F4:FC:E7
 
True(将离线):IP:19216808/24
DG:19216801
MAC:00:0D:60:C3:05:34
 
Fake(将修改IP地址为19216808):IP:19216808/24
DG:19216801
MAC:00:06:D0:06:05:47
 
 
首先,我在ISA
Server上使用ARP
-S来绑定True的IP地址和MAC地址,运行命令:
ARP
-s
19216808
00-0D-60-C3-05-34
然后执行ARP
-a来查看ARP缓存列表,结果如下图所示。你可以看到在ARP缓存列表中IP地址19216808的类型为static,这表明它是静态项。此时,我们在ISA
Server上的绑定就成功了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/12946491.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-29
下一篇 2023-05-29

发表评论

登录后才能评论

评论列表(0条)

保存