`
smz11smz
  • 浏览: 16550 次
社区版块
存档分类
最新评论

C# asp.net获取外网IP

 
阅读更多

C# asp.net获取外网IP
2011年12月01日
  #region 获取外网IP
  //获取外网IP
  public static string getReaderIpds()
  {
  string pubIP = "";
  string serviceUrl = "";
  Socket sk = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  sk.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
  string req = "M-SEARCH * HTTP/1.1\r\n" +
  "HOST: 239.255.255.250:1900\r\n" +
  "ST:upnp:rootdevice\r\n" +
  "MAN:\"ssdp:discover\"\r\n" +
  "MX:3\r\n\r\n";
  byte[] data = System.Text.Encoding.ASCII.GetBytes(req);
  byte[] receive = new byte[0x1000];
  IPEndPoint ipe = new IPEndPoint(IPAddress.Broadcast, 1900);
  //发送数据,获取服务地址
  sk.SendTo(data, ipe);
  int length = 0;
  length = sk.Receive(receive);
  string resp = Encoding.ASCII.GetString(receive, 0, receive.Length).ToLower();
  if (resp.Contains("upnp:rootdevice"))
  {
  resp = resp.Substring(resp.ToLower().IndexOf("location:") + 9);
  resp = resp.Substring(0, resp.IndexOf("\r")).Trim();
  serviceUrl = GetServiceUrl(resp);//解析获取地址
  }
  //利用ssdp discover服务向serviceIP发送请求,存储返回结果,并在xml中解析出外网ip
  string reqStr = "" +
  "" +
  "" +
  "" + "" +
  "" +
  "";
  byte[] b = Encoding.UTF8.GetBytes(reqStr);
  WebRequest wr = HttpWebRequest.Create(serviceUrl);
  wr.Method = "POST";
  wr.Headers.Add("SOAPACTION", "\"urn:schemas-upnp-org:service:WANIPConnection:1#" + "GetExternalIPAddress" + "\"");
  wr.ContentType = "text/xml; charset=\"utf-8\"";
  wr.ContentLength = b.Length;
  wr.GetRequestStream().Write(b, 0, b.Length);
  //
  XmlDocument xml = new XmlDocument();
  WebResponse ws = wr.GetResponse();
  Stream ress = ws.GetResponseStream();
  xml.Load(ress);
  XmlNamespaceManager xmlMgr = new XmlNamespaceManager(xml.NameTable);
  xmlMgr.AddNamespace("tns", "urn:schemas-upnp-org:device-1-0");
  pubIP = xml.SelectSingleNode("//NewExternalIPAddress/text()", xmlMgr).Value;
  return pubIP;
  }
  ///
  /// 剖析
  ///
  ///
  ///
  private static string GetServiceUrl(string resp)
  {
  try
  {
  XmlDocument desc = new XmlDocument();
  desc.Load(WebRequest.Create(resp).GetResponse().GetResponseStream());
  XmlNamespaceManager nsMgr = new XmlNamespaceManager(desc.NameTable);
  nsMgr.AddNamespace("tns", "urn:schemas-upnp-org:device-1-0");
  XmlNode typen = desc.SelectSingleNode("//tns:device/tns:deviceType/text()", nsMgr);
  if (!typen.Value.Contains("InternetGatewayDevice"))
  return null;
  XmlNode node = desc.SelectSingleNode("//tns:service[tns:serviceType=\"urn:schemas-upnp-org:service:WANIPConnection:1\"]/tns:controlURL/text()", nsMgr);
  if (node == null)
  return null;
  XmlNode eventnode = desc.SelectSingleNode("//tns:service[tns:serviceType=\"urn:schemas-upnp-org:service:WANIPConnection:1\"]/tns:eventSubURL/text()", nsMgr);
  int n = resp.IndexOf("://");
  n = resp.IndexOf('/', n + 3);
  string surl = resp.Substring(0, n) + eventnode.Value;
  return surl;
  }
  catch
  {
  return null;
  }
  }
  //获取外网IP
  private static string GetExternalIP()
  {
  return "";
  //以下是通过外网页面读取的
  //try
  //{  
  //    System.Net.WebClient client = new System.Net.WebClient();
  //    client.Encoding = System.Text.Encoding.Default;
  //    string reply = client.DownloadString("http://www.ip138.com/ip2city.asp");
  //    string[] ipStr = reply.Split(new char[] { '[', ']' });
  //    pubIP = ipStr[1];
  //}
  //catch (Exception ex)
  //{
  //    System.Windows.Forms.MessageBox.Show(ex.Message);
  //}
  }
  #endregion
分享到:
评论

相关推荐

    ASP.NET编程百例(PDF)

    ASP.NET是微软.NET战略中的一个重要成员,除了可以使用Visual C#、VB.NET、VisualC++.NET、JScript.NET等语言编写外,还可以使用第三方的.NET接口(如COBOL.NET、 Perl.NET等)进行编写。本书通过100个精彩实例...

    ASP.NET编程百例 PDF扫描版 附源代码(vb.net)

    ASP NET是微软.NET战略中的一个重要成员 除了可以使用Visual C# VB.NET VisualC++ NET JScript.NET等语言编写外 还可以使用第三方的.NET接口 如COBOL.NET Perl.NET等 进行编写 本书通过100个精彩实例 由浅入深...

    asp.net 双向探针

    ASP.NET+c#做的双向探针,即可以看服务器的相关信息,也可以看自己的信息。 不需要做任何设置,上传后就可运行(服务器要支持.net啊) 如果使用国外空间请将web.config一起上传,否则可能会出现乱码。 版本更新...

    亮剑.NET深入体验与实战精要2

    1.6.1 如何创建ASP.NET项目 58 1.6.2 如何创建Windows项目 61 1.6.3 Visual Studio.NET 2008 操作与使用技巧 61 1.6.4 常见开发调试技巧 66 1.6.5 错误异常处理方法 70 本章常见技术面试题 76 常见面试技巧之面试...

    亮剑.NET深入体验与实战精要3

    1.6.1 如何创建ASP.NET项目 58 1.6.2 如何创建Windows项目 61 1.6.3 Visual Studio.NET 2008 操作与使用技巧 61 1.6.4 常见开发调试技巧 66 1.6.5 错误异常处理方法 70 本章常见技术面试题 76 常见面试技巧之面试...

    MF00068-ASP.NET仿百度外卖订餐系统源码 (PC版+手机版+商户版).zip

    ASP.NET仿百度外卖订餐系统源码 (PC版+手机版+商户版) 注意:不带技术支持,有帮助文件,虚拟商品,发货不退,看好再拍。 开发语言 : C# 数据库 : SQL2008 开发工具 : VS2012 源码类型 : WebForm 菜单功能: 一....

    计算机设计开题报告范文.docx

    (1)面向对象性 ASP.NET将C#作为一种面向对象语言,在很多方面来看,C#将成为微软的与Java相似的语言。 C#是ASP.NET开发中一个最重要的功能,微软会将C#发展成为Java的强劲对手。这也是微软.NET框架的一个重要组成...

    计算机设计开题报告范文(1).docx

    (1)面向对象性 ASP.NET将C#作为一种面向对象语言,在很多方面来看,C#将成为微软的与Java相似的语言。 计算机设计开题报告范文(1)全文共10页,当前为第1页。C#是ASP.NET开发中一个最重要的功能,微软会将C#发展成为...

    C#编程经验技巧宝典

    112 <br>0188 如何在ASP.NET中显示当前IE浏览器头信息 113 <br>5.6 其他应用技巧 114 <br>0189 如何判断年份是否为闰年 114 <br>0190 如何根据年份判断十二生肖 114 <br>0191 如何根据IP...

Global site tag (gtag.js) - Google Analytics