係統粉 > 電腦問答 > 其他問答

已解決在內網中如何跨網段根據IP地址查找到mac地址

提問者:bbnini75  |  瀏覽次  |  提問時間:2017-02-23  |  回答數量:2

在內網中如何跨網段根據IP地址查找到mac地址例如本機IP是192.168.1.100,知道另一個IP是192.168.20.36,相互能ping通,如何根據IP查找到對方的mac地址

已有2條答案
全球音穀vocc

全球音穀vocc

回答數:113  |  被采納數:69

跨網段獲取MAC地址方法如下:
protected void Page_Load(object sender, EventArgs e)
{
//ReadMSG();

if (!IsPostBack)
{
Label1.Text =
"//客戶端ip:" +

Request.ServerVariables.Get("Remote_Addr").ToString() + "<br>" +
" //客戶端主機名:" +
Request.ServerVariables.Get("Remote_Host").ToString() + "<br>" +
"//客戶端瀏覽器IE:" +
Request.Browser.Browser + "<br>" +
"//客戶端瀏覽器 版本號:" +
Request.Browser.MajorVersion + "<br>" +
"//客戶端操作係統:" +
Request.Browser.Platform + "<br>" +
"//服務器ip:" +
Request.ServerVariables.Get("Local_Addr").ToString() + "<br>" +
"//服務器名:" +
Request.ServerVariables.Get("Server_Name").ToString() + "<br>";

string stringMAC = "";
string stringIP = "";
ManagementClass MC = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection MOC = MC.GetInstances();

foreach (ManagementObject MO in MOC)
{
if ((bool)MO["IPEnabled"] == true)
{
stringMAC += MO["MACAddress"].ToString(); //獲取網卡的地址
string[] IPAddresses = (string[])MO["IPAddress"]; //獲取本地的IP地址
if (IPAddresses.Length > 0)
stringIP = IPAddresses[0];
Label1.Text += "<br>MAC:" + stringMAC + "/ IP:" + stringIP;
if (stringIP == "192.168.1.45")
Label1.Text += "<br>I get you :192.168.1.45<br>";
}
}
//在頁麵上打印出客戶端的網卡物理地址(MAC)
//Response.Write(this.GetMac(Request.UserHostAddress.ToString())+"<br>");
GetInfo();
}
}
//獲取cpu序列號,硬盤ID,網卡MAC地址
private void GetInfo()
{
string cpuInfo = "";//cpu序列號
ManagementClass cimobject = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = cimobject.GetInstances();
foreach (ManagementObject mo in moc)
{
cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
Label1.Text += "cpu序列號:" + cpuInfo.ToString();
}

//獲取硬盤ID
String HDid;
ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection moc1 = cimobject1.GetInstances();
foreach (ManagementObject mo in moc1)
{
HDid = (string)mo.Properties["Model"].Value;
Label1.Text += "硬盤序列號:" + HDid.ToString();
}

}

//protected void Button1_Click(object sender, EventArgs e)
//{

// try
// {
// File.Delete(@"D:\html.html");
// }
// catch (Exception e2)
// {
// Response.Write(e2.Message);
// }
// Response.Write("Delete Successed!");

//}
//獲取遠程客戶端的網卡物理地址(MAC)
public string GetMac(string IP) //para IP is the client's IP
{
string dirResults = "";
ProcessStartInfo psi = new ProcessStartInfo();
Process proc = new Process();
psi.FileName = "nbtstat";
psi.RedirectStandardInput = false;
psi.RedirectStandardOutput = true;
psi.Arguments = "-A " + IP;
psi.UseShellExecute = false;
proc = Process.Start(psi);
dirResults = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
dirResults = dirResults.Replace("\r", "").Replace("\n", "").Replace("\t", "");

Regex reg = new Regex("Mac[ ]{0,}Address[ ]{0,}=[ ]{0,}(?<key>((.)*?))__MAC", RegexOptions.IgnoreCase | RegexOptions.Compiled);
Match mc = reg.Match(dirResults + "__MAC");

if (mc.Success)
{
return mc.Groups["key"].Value;
}
else
{
reg = new Regex("Host not found", RegexOptions.IgnoreCase | RegexOptions.Compiled);
mc = reg.Match(dirResults);
if (mc.Success)
{
return "Host not found!";
}
else
{
return "";
}
}
}
2017-03-02 20:18:00
讚 11
文字旅者

文字旅者

回答數:33  |  被采納數:36

第一種獲取遠程MAC的方法是使用命令arp -a(示例:arp -a 192.168.20.36),在命令行輸入 “arp -a 192.168.20.36”,按回車,獲取到的物理地址就是所謂的MAC地址;第二種獲取遠程MAC的方法是使用命令nbtstat -a(示例:nbtstat -a 192.168.20.36),在命令行輸入"nbtstat -a 192.168.20.36",按回車,使用這個命令的好處就是不僅能獲取到MAC地址,還能獲取到遠程電腦的電腦名稱和所屬工作組。
2017-03-02 16:14:24
讚 3
相關問答
最新其他問答
解決方法