今天打算试着写个小聊天程序,但是要用到获取本机IP,以前从没用过。摆渡百度了一会儿,出于贪心,想把各种获取本机IP的方法给找出来。摆渡+测试了几个小时,于是有了下面的成果,有点小累,但看到这些成果,也很高兴。不一定很全,但也不少了。

  1. private void GetIP()
  2. {
  3. string hostName = Dns.GetHostName();//本机名
  4. //System.Net.IPAddress[] addressList = Dns.GetHostByName(hostName).AddressList;//会警告GetHostByName()已过期,我运行时且只返回了一个IPv4的地址
  5. System.Net.IPAddress[] addressList = Dns.GetHostAddresses(hostName);//会返回所有地址,包括IPv4和IPv6
  6. foreach (IPAddress ip in addressList)
  7. {
  8. listBox1.Items.Add(ip.ToString());
  9. }
  10. }

②使用IPHostEntry获取本机局域网地址

  1. static string GetLocalIp()
  2. {
  3. string hostname = Dns.GetHostName();//得到本机名
  4. //IPHostEntry localhost = Dns.GetHostByName(hostname);//方法已过期,只得到IPv4的地址
  5. <span style="WHITE-SPACE: pre"> </span>    IPHostEntry localhost = Dns.GetHostEntry(hostname);
  6. IPAddress localaddr = localhost.AddressList[0];
  7. return localaddr.ToString();
  8. }

③获取本机网络ip地址

方法时通过向网站向一些提供IP查询的网站发送webrequest,然后分析返回的数据流

  1. string strUrl = "提供IP查询的网站的链接";
  2. Uri uri = new Uri(strUrl);
  3. WebRequest webreq = WebRequest.Create(uri);
  4. Stream s = webreq .GetResponse().GetResponseStream();
  5. StreamReader sr = new StreamReader(s, Encoding.Default);
  6. string all = sr.ReadToEnd();
  7. int i = all.IndexOf("[") + 1;
  8. //分析字符串得到IP
  9. return ip;
  10. /*
  11. 我用的是http://www.ip.cn/getip.php?action=getip&ip_url=&from=web
  12. (这种链接很容易找的,百度“IP”得到一些网站,分析一下网站的链接就能得到)
  13. 返回的数据是:
  14. <div class="well"><p>当前 IP:<code>0.0.0.0</code>&nbsp;来自:XX省XX市 电信</p><p>GeoIP: Beijing, China</p></div>
  15. 解析这段就行
  16. */

④//由于用到了ManagementClass、ManagementObjectCollection;必须添加引用System.Management.dll及using System.Management;

  1. private void GetIP2()
  2. {
  3. string stringMAC = "";
  4. string stringIP = "";
  5. ManagementClass managementClass = new ManagementClass("Win32_NetworkAdapterConfiguration");
  6. ManagementObjectCollection managementObjectCollection = managementClass.GetInstances();
  7. foreach(ManagementObject managementObject in managementObjectCollection)
  8. {
  9. if ((bool)managementObject["IPEnabled"] == true)
  10. {
  11. stringMAC += managementObject["MACAddress"].ToString();
  12. string[] IPAddresses = (string[])managementObject["IPAddress"];
  13. if (IPAddresses.Length > 0)
  14. {
  15. stringIP = IPAddresses[0];
  16. }
  17. }
  18. }
  19. txtMAC.Text = stringMAC.ToString();
  20. txtIP.Text = stringIP.ToString();
  21. }

⑤调用一个网站提供的Web服务来查询IP网址:http://www.webxml.com.cn/zh_cn/web_services.aspx服务:http://webservice.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx
弄了好半天,但是没学会怎样调用Web Service,按照搜到的页面做也不行,遂先放弃吧.....毕竟还未接触到WebService,改天把WebService搞定再来一定就容易了(留待以后完善吧)

⑥通过获取CMD里ipconfig命令的结果来得到IP

  1. private void GetIP6()
  2. {
  3. Process cmd = new Process();
  4. cmd.StartInfo.FileName = "ipconfig.exe";//设置程序名
  5. cmd.StartInfo.Arguments = "/all";  //参数
  6. //重定向标准输出
  7. cmd.StartInfo.RedirectStandardOutput = true;
  8. cmd.StartInfo.RedirectStandardInput = true;
  9. cmd.StartInfo.UseShellExecute = false;
  10. cmd.StartInfo.CreateNoWindow = true;//不显示窗口(控制台程序是黑屏)
  11. //cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;//暂时不明白什么意思
  12. /*
  13. 收集一下 有备无患
  14. 关于:ProcessWindowStyle.Hidden隐藏后如何再显示?
  15. hwndWin32Host = Win32Native.FindWindow(null, win32Exinfo.windowsName);
  16. Win32Native.ShowWindow(hwndWin32Host, 1);     //先FindWindow找到窗口后再ShowWindow
  17. */
  18. cmd.Start();
  19. string info = cmd.StandardOutput.ReadToEnd();
  20. cmd.WaitForExit();
  21. cmd.Close();
  22. textBox1.AppendText(info);
  23. }

⑦NetworkInformation

    1. private void GetIP5()
    2. {
    3. //需要的命名空间
    4. //using System.Net.NetworkInformation;
    5. //using System.Net.Sockets;
    6. string str = "";
    7. NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
    8. int i = 0;
    9. foreach (NetworkInterface adapter in adapters)
    10. {
    11. IPInterfaceProperties adapterProperties = adapter.GetIPProperties();
    12. UnicastIPAddressInformationCollection allAddress =
    13. adapterProperties.UnicastAddresses;
    14. if (allAddress.Count > 0)
    15. {
    16. str += "interface   " + i + "description:\n\t " + adapter.Description + "\n ";
    17. i++;
    18. foreach (UnicastIPAddressInformation addr in allAddress)
    19. {
    20. if (addr.Address.AddressFamily == AddressFamily.InterNetworkV6)
    21. {
    22. ipListComb.Items.Add(addr.Address);
    23. }
    24. if (addr.Address.AddressFamily == AddressFamily.InterNetwork)
    25. {
    26. comboBox1.Items.Add(addr.Address);
    27. }
    28. }
    29. }
    30. }
    31. MessageBox.Show(str);
    32. }

C#获取本机IP搜集整理7种方法的更多相关文章

  1. 关于是用dotnet获取本机IP地址+计算机名的方法

    印象中在maxscript帮助文档里找到过方法,但是当时没记下来.只能通过dotnet实现了. 如果电脑有无线网卡和本地连接,可能会出现乱码,也问了写dotnet的朋友,提供了一些思路,不过最终还是使 ...

  2. Java获取客户端真实IP地址的两种方法

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...

  3. PHP获取用户访问IP地址的5种方法

    IP地址获得的五种方法: <?php //方法1: $ip = $_SERVER["REMOTE_ADDR"]; echo $ip; //方法2: $user_IP = ($ ...

  4. [转] python 获取本机ip地址的两种实现方法

    #!/usr/bin/python import socket import fcntl import struct def get_ip_address(ifname): s = socket.so ...

  5. LNAMP架构中后端Apache获取用户真实IP地址的2种方法(转)

    一.Nginx反向代理配置: 1.虚拟主机配置 复制代码代码如下: location / {    try_files $uri @apache;} location @apache {interna ...

  6. Linux 获取本机IP、MAC地址用法大全

    getifaddrs()和struct ifaddrs的使用,获取本机IP ifaddrs结构体定义如下: struct ifaddrs { struct ifaddrs *ifa_next; /* ...

  7. python 获取本机IP的三种方式

    python获取本机IP的方式 第一种: #!/usr/bin/python import socket import fcntl import struct def get_ip_address(i ...

  8. java获取本机IP地址

    转载自:http://blog.csdn.net/thunder09/article/details/5360251 在网上找了几个用java获取本机IP地址的代码,发现都少都有些不完美,自己整理了一 ...

  9. 获取本机IP地址

    这里有两种方法: //获取本机IP - (NSString *)localIPAddress { NSString *localIP = nil; struct ifaddrs *addrs; ) { ...

随机推荐

  1. 配置Myeclipse中的项目部署到服务器,报the selected server is enabled, but is not configured properly.

    the selected server is enabled, but is not configured properly. deployment to it will not be permitt ...

  2. 每天进步一点点--JS中的getYear()

    又是这两天在项目中遇到的,或许很简单,但真实第一次遇到,记录一下. 在页面上用JS获取了一下当前的日期,并用getYear()方法返回了当前的年度,2013也没问题,代码在IE中都测试通过了之后就提交 ...

  3. CSU 1505 酷酷的单词 湖南省赛第十届题目

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1505 题意:技巧题,就是一行字符串中,每个字母出现的次数互不相同,复即为酷的单词. 解题 ...

  4. 《University Calculus》-chape10-向量和空间几何学-叉积

    叉积概念的引入: 在平面中我们为了度量一条直线的倾斜状态,为引入倾斜角这个概念.而通过在直角坐标系中建立tan α = k,我们实现了将几何关系和代数关系的衔接,这其实也是用计算机解决几何问题的一个核 ...

  5. An Easy Problem?! - POJ 2826(求面积)

    题目大意:有两块木板交叉起来接雨水,问最多能接多少.   分析:题目描述很简单,不过有些细节还是需要注意到,如下图几种情况:   #include<stdio.h> #include< ...

  6. hdoj 1686 Oulipo【求一个字符串在另一个字符串中出现次数】

    Oulipo Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  7. Spring 的注册与注入

    之前和同学老是爱混淆注册与注入.今天再看一遍感觉多了一些理解. 注册就是声明bean.就是让spring能够找到这个bean服务. 注入就是把bean(A)加入到另一个bean(B)的属性中.让另外一 ...

  8. rails tutorial sample app

    阅读第3章时,按照教程第一次运行rspec失败了: E:\05 Create\Code\temp\railstutorial\sample_app>rspec spec/requests/sta ...

  9. [置顶] JQuery插件学习教程

    这是JQuery其它常用插件的视频教程,包括validate插件,.comet插件等.同时有大量实例项目,如果你是喜欢JQuery的童鞋千万不要错过. 教程的内容有: 1_validate插件(1) ...

  10. linux 命令c语言代码实现

    自己学习<APUE>时写的linux下一些命令(大概40个左右)实现,仅当学习使用,这些命令包含cat cp echo head ls paste rmdir tail umask who ...