如何用C#语言编程获取本地默认网关的IP和MAC地址!
解决方案 »
- C#.net 如何调用VB6生成的Dll?
- 对ZedGraph和打印有了解的都进来看看...顶者有分..
- 情问各位,我装有sdk1.1和sdk2.0,在vs2003现在使用的是v1.1怎么换成v.20
- 关于生成dll文件的小问题...在线等.先谢谢了.
- 请教一下,如何将个C语言程序变成一个dll文件引用
- 怎样获得网页中文本框的句柄呢???
- 关于Response.Redirect
- (SOS)WindowsService环境下定时执行DeviceIOControl及回调函数问题
- 测试接力
- 请问c++.net和c#.net有什么不同,为什么合并成一个?
- string类型去除重复
- treeview选择节点
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\{16AA3431-43D5-46B8-A529-C6EF3EB4F2D5}\Parameters\Tcpip
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\{16AA3431-43D5-46B8-A529-C6EF3EB4F2D5}\Parameters\Tcpip
你说的方法里的三条语句
Console.WriteLine((nic["IPAddress"] as String[])[0]);Console.WriteLine((nic["IPSubnet"] as String[])[0]);Console.WriteLine((nic["DefaultIPGateway"] as String[])[0]);分别能获取本机的IP,SUBNET和网关的IP,那么网关的MAC怎么获取呢?
private static extern int SendARP(Int32 dest,Int32 host,ref Int64 mac,ref Int32 length);
[DllImport("Ws2_32.dll")]
private static extern Int32 inet_addr(string ip);
///
/// 根据ip得到网卡mac地址
///
/// 给出的ip地址
/// 对应ip的网卡mac地址
public static Int64 GetMACByIP(string ip)
{
Int32 ldest= inet_addr(ip); //目的地的ip
try
{
Int64 macinfo = new Int64();
Int32 len = 6;
int res = SendARP(ldest,0, ref macinfo, ref len);
return macinfo;
}
catch(Exception err)
{
Console.WriteLine("Error:{0}",err.Message);
}
return 0;
} 添加:using System.Runtime.InteropServices;
可以取得
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
Process p = Process.Start(psi);
string output = p.StandardOutput.ReadToEnd();
Console.WriteLine(Regex.Match(output, @"([0-9A-F]{2}-){5}[0-9A-F]{2}").Value);
已经网关调用arp获得物理地址
ManagementObjectCollection queryCollection = query.Get();foreach (ManagementObject mo in queryCollection)
{
strMac=mo["MACAddress"].ToString();\\获得本机的MAC
}
private void GetComputerInfo(out string hostname,out string mac)
{
hostname = Dns.GetHostName(); ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
mac = "";
foreach(ManagementObject mo in moc)
{
if((bool)mo["IPEnabled"])
{
mac += mo["MacAddress"].ToString().Replace(":","-");
}
mo.Dispose();
}
}
#endregion
private string GetMac(string ip)
{
string str1=string.Empty;
string str2=string.Empty; ProcessStartInfo info1 = new ProcessStartInfo();
Process process1 = new Process(); info1.FileName = " nbtstat ";
info1.RedirectStandardInput = false;
info1.RedirectStandardOutput = true;
info1.Arguments = " -A " + ip;
info1.UseShellExecute = false;
process1 = Process.Start(info1); str2 = process1.StandardOutput.ReadToEnd();
int num1 = str2.Trim().ToLower().IndexOf("mac address", 0);
if (num1 < -1)
return str1;
else
{
process1.WaitForExit();
str1 = str2.Substring(num1+20, 17);
}
return str1;
}
/// <summary>
/// 获得一般地址MAC(测试不能获得网关MAC)
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
private string GetMac(string ip)
{
string str1=string.Empty;
string str2=string.Empty; ProcessStartInfo info1 = new ProcessStartInfo();
Process process1 = new Process(); info1.FileName = " nbtstat ";
info1.RedirectStandardInput = false;
info1.RedirectStandardOutput = true;
info1.Arguments = " -A " + ip;
info1.UseShellExecute = false;
process1 = Process.Start(info1); str2 = process1.StandardOutput.ReadToEnd();
str1 = Regex.Match(str2.ToUpper(), @"([0-9A-F]{2}-){5}[0-9A-F]{2}").Value; return str1;
} /// <summary>
/// 测试获得网关MAC,不能获得一般MAC
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
private string GetMacs(string ip)
{
string str1 = string.Empty;
string str2 = string.Empty; ProcessStartInfo info1 = new ProcessStartInfo();
Process process1 = new Process(); info1.FileName = " arp ";
info1.RedirectStandardInput = false;
info1.RedirectStandardOutput = true;
info1.Arguments = " -a " + ip;
info1.UseShellExecute = false;
process1 = Process.Start(info1); str2 = process1.StandardOutput.ReadToEnd();
str1 = Regex.Match(str2.ToUpper(), @"([0-9A-F]{2}-){5}[0-9A-F]{2}").Value; return str1;
}
#endregion
你的程序我没有编译成功呀,你试过吗?