這些位址是包含所有網絡卡(虛擬網絡卡)的ipv4和ipv6位址。
1 string name = dns.gethostname();
2 ipaddress ipadrlist = dns.gethostaddresses(name);
1若要單單獲取ipv4位址,可以用ipadress.addressfamily 屬性判斷:對於 ipv4,返回 internetwork;對於 ipv6,返回 internetworkv6。string name =dns.gethostname();
2 ipaddress ipadrlist =dns.gethostaddresses(name);
3foreach (ipaddress ipa in
ipadrlist)
4
然而如果本機可能有多個ipv4的位址,那如何獲取訪問預設閘道器時使用的網絡卡ip呢。在csdn論壇找到了大神的方法,用的是查詢本機路由表。
可別小看,還是有很多需要考慮的:
1.乙個電腦有多個網絡卡,有線的、無線的、還有vmare虛擬的兩個網絡卡。
2.就算只有乙個網絡卡,但是該網絡卡配置了n個ip位址.其中還包括ipv6位址。
/// /// 獲取當前使用的ip
///
///
public static string getlocalip()
else
catch (exception)
} }
/// /// 獲取本機主dns
///
///
public static string getprimarydns()
else
} /// /// 執行乙個控制台程式並返回其輸出引數。
///
/// 程式名
/// 輸入引數
///
process proc = new process();
proc.startinfo.filename = filename;
proc.startinfo.createnowindow = true;
proc.startinfo.arguments = arguments;
proc.startinfo.redirectstandardoutput = true;
proc.startinfo.useshellexecute = false;
proc.start();
using (system.io.streamreader sr = new system.io.streamreader(proc.standardoutput.basestream, encoding.default))
//if (!proc.ha***ited)
//
//上面標記的是原文,下面是我自己除錯錯誤後自行修改的
thread.sleep(100); //貌似呼叫系統的nslookup還未返回資料或者資料未編碼完成,程式就已經跳過直接執行
//txt = sr.readtoend()了,導致返回的資料為空,故睡眠令硬體反應
if (!proc.ha***ited) //在無引數呼叫nslookup後,可以繼續輸入命令繼續操作,如果程序未停止就直接執行
string txt = sr.readtoend();
sr.close();
if (recordlog)
trace.writeline(txt);
return txt;
} }
catch (exception ex)
}
另有一種方法通過用ipconfig來獲取:
private void getip()
linux下獲取本機ip位址,ipv4和ipv6
include include include include include include include include int getip v4 and v6 linux int family,char address,int size if getifaddrs ifap0 for ifa...
IPv4單播位址
ipv4單播位址標識網路中的乙個介面的位置,就像用街道位址標識城市街區的房子一樣。正如乙個街道位址必須能夠標識乙個唯一的住所一樣,ipv4單播位址也必須是全域性唯一的,而且要採用一種統一的格式。1.單播位址的組成 每個ipv4單播位址包括乙個網路id和乙個主機id。l 網路id 又稱網路位址 它是i...
ipv4的私有位址
本文出自 ipv4的位址,有4個8位二進位制數表示,為了表示方便,常常用十進位制數表示,8位的二進位制的範圍是0 255。這樣一共可以有4gb的定址範圍。a 10.0.0.0 10.255.255.255 8 b 172.16.0.0 172.31.255.255 12 c 192.168.0.0 ...