1. 程式人生 > >C# 之 獲取服務器IP,客戶端IP以及其它

C# 之 獲取服務器IP,客戶端IP以及其它

output ipaddress ons use variables 例子 mac地址 user nag

本文主要是從網絡上搜索的文章進行參考,也是提供一個大概的方向和思路吧。當然如果有能用的代碼,可直接復制過去根據自己的情況修改和使用。

一、思路(主要用於局域網內)

通過Web獲取客戶端的IP地址較簡單,從客戶端向web服務器發送的數據報中(Request對象)中即可
解析出,但實際應用中,還要考慮代理服務器,路由器的轉發等等。

而獲取MAC的過程較復雜,因為客戶端向服務器發送的請求對象中不包含MAC地址,因此得到兩種思
路來獲取客戶端MAC地址:

  (1).在客戶端來獲取客戶機的MAC地址,所以當請求到達客戶端後,通過客戶端腳本來獲取客戶端
MAC地址,然後再傳送給服務器端。

  (2).先獲取客戶端IP地址,然後在局域網中發送ARP請求,通過ARP協議和已知的IP地址來解析客戶
端的MAC地址

下面為獲取IP地址、MAC地址的的代碼, 以及通過發送ARP請求解析MAC地址的過程:

https://blog.csdn.net/wang379275614/article/details/17596135

-------------------------------------------------------------------------------

切記要引用命名空間:using System.Management。
心中竊喜,呵呵還是比較簡單的。測試,暈 ! 這麽做獲取的是服務器的MAC。

要獲取客戶端的MAC用C#做就比較復雜了。網上也有很多類似的例子,不過獲取客戶端的信息最好還是用
客戶端腳本比較好。下面是個JavaScript的獲取MAC的例子(轉):
https://www.cnblogs.com/kingboy/articles/1025399.html

-------------------------------------------------------------------------------

Request.UserHostAddress

string IP = (Request.ServerVariables["HTTP_VIA"]!=null)?Request.ServerVariables

["HTTP_X_FORWARDED_FOR"].ToString():Request.ServerVariables["REMOTE_ADDR"].ToString();

string ipAddress = System.Web.HttpContext.Current.Request.UserHostAddress;

先引用命名空間:using System.Net;
得到客戶端IP地址:Request.ServerVariables["REMOTE_ADDR"]或Rqurest.UserHostAddress();
得到本機IP地址:Request.ServerVariables["local_addr"]或addr = new System.Net.IPAddress (
Dns.GetHostByName ( Dns.GetHostName ( ) ) .AddressList [0].Address ) ;

HttpBrowserCapabilities bc= Request.Browser;
Label3.Text=bc.Browser+" "+bc.Version;//得到瀏覽器版本
Label2.Text=bc.Platform;//得到操作系統
hostname=Dns.GetHostName();
IPHostEntry jj=Dns.GetHostByName(hostname);//得到IP
//IPAddress ip=Dns.Resolve(hostname);
Label1.Text=jj.AddressList[0].ToString();

https://bbs.csdn.net/topics/90213110

-------------------------------------------------------------------------------

------------------------------------------------------------------------------

1、獲取客戶端IP:Request.ServerVariables.Get("Remote_Addr").ToString();

2、獲取客戶端主機名:Request.ServerVariables.Get("Remote_Host").ToString();

3、獲取客戶端瀏覽器:Request.Browser.Browser;

4、獲取客戶端瀏覽器 版本號:Request.Browser.MajorVersion;

5、獲取客戶端操作系統:Request.Browser.Platform;

6、獲取服務器IP:Request.ServerVariables.Get("Local_Addr").ToString();

7、獲取服務器名:Request.ServerVariables.Get("Server_Name").ToString();


技術分享圖片如果你想進一步了解ServerVariables,可以用

foreach(String o in Request.ServerVariables){
    Response.Write(o+"="+Request.ServerVariables[o]+"<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];
       Response.Write(stringMAC+"/"+stringIP);
     }
   }
技術分享圖片



技術分享圖片asp.net
+c#如何獲取客戶端網卡的MAC地址?

技術分享圖片
//要引用到以下兩個命名空間
using System.Diagnostics;
using System.Text.RegularExpressions;

//獲取遠程客戶端的網卡物理地址(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 "";
}
}
}

//在頁面上打印出客戶端的網卡物理地址(MAC)
Response.Write(this.GetMac(Request.UserHostAddress.ToString()));
技術分享圖片


技術分享圖片
技術分享圖片 獲取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();
技術分享圖片 Response.Write (
"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;
技術分享圖片 Response.Write (
"硬盤序列號:"+HDid.ToString ());
技術分享圖片 }

技術分享圖片
技術分享圖片
技術分享圖片
//獲取網卡硬件地址
技術分享圖片

技術分享圖片 ManagementClass mc
= new ManagementClass("Win32_NetworkAdapterConfiguration");
技術分享圖片 ManagementObjectCollection moc2
= mc.GetInstances();
技術分享圖片
foreach(ManagementObject mo in moc2)
技術分享圖片
{
技術分享圖片
if((bool)mo["IPEnabled"] == true)
技術分享圖片 Response.Write(
"MAC address\t{0}"+mo["MacAddress"].ToString());
技術分享圖片 mo.Dispose();
技術分享圖片 }

技術分享圖片

出處:https://www.cnblogs.com/xinaixia/p/4772955.html

C# 之 獲取服務器IP,客戶端IP以及其它