- 浏览: 16550 次
最新评论
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
发表评论
-
VC中使用自定义消息在进程间通讯
2012-01-20 00:50 1428VC中使用自定义消息在进程间通讯 2011年06月14日 ... -
重叠IO 通信模型,函数记录。
2012-01-20 00:50 910重叠IO 通信模型,函数记录。 2010年12月07日 ... -
apache2 安装与配置
2012-01-20 00:50 1067apache2 安装与配置 2010年11月09日 v0 ... -
Heritrix源码分析(二) 配置文件order.xml介绍
2012-01-20 00:50 639Heritrix源码分析(二) 配 ... -
应用mina的例子做了一些修改,但有关于连接数的问题
2012-01-20 00:50 1164应用mina的例子做了一些修改,但有关于连接数的问题 201 ... -
Windows系统的Regsvr32
2012-01-17 01:08 806Windows系统的Regsvr32 2011 ... -
i9000
2012-01-17 01:08 906i9000 2011年03月26日 *#0*#工程测试, ... -
as3面试题
2012-01-17 01:08 647as3面试题 2011年09月13日 ... -
regsvr32用法集合
2012-01-17 01:08 1000regsvr32用法集合 2011年12月02日 R&a ... -
pcb layout 4
2012-01-15 19:49 747pcb layout 4 2011年12月30日 1.一 ... -
写给Linux内核新手-关于Linux内核学习的误区(转自ChinaUnix.net)
2012-01-15 19:49 994写给Linux内核新手-关于L ... -
发烧高端版v2.0版本
2012-01-15 19:49 765发烧高端版v2.0版本 4小时前 CPU AMD FX- ... -
compass搜索
2012-01-11 12:02 671compass搜索 2011年07月01日 compas ... -
apache mina error dead lock: iofuture.await()-yidianfengfan-iteye技术网站
2012-01-11 12:02 1120apache mina error dead lock: io ... -
sqlcmd错误的解决方法-bluedusk-iteye技术网站
2012-01-11 12:02 998sqlcmd错误的解决方法-bluedusk-iteye技术网 ... -
web framework
2012-01-11 12:02 593web framework 2011年07月01日 w ... -
GAE with spring实践经验
2012-01-11 12:02 704GAE with spring实践经验 2011年07月01 ...
相关推荐
ASP.NET是微软.NET战略中的一个重要成员,除了可以使用Visual C#、VB.NET、VisualC++.NET、JScript.NET等语言编写外,还可以使用第三方的.NET接口(如COBOL.NET、 Perl.NET等)进行编写。本书通过100个精彩实例...
ASP NET是微软.NET战略中的一个重要成员 除了可以使用Visual C# VB.NET VisualC++ NET JScript.NET等语言编写外 还可以使用第三方的.NET接口 如COBOL.NET Perl.NET等 进行编写 本书通过100个精彩实例 由浅入深...
ASP.NET+c#做的双向探针,即可以看服务器的相关信息,也可以看自己的信息。 不需要做任何设置,上传后就可运行(服务器要支持.net啊) 如果使用国外空间请将web.config一起上传,否则可能会出现乱码。 版本更新...
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 常见面试技巧之面试...
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 常见面试技巧之面试...
ASP.NET仿百度外卖订餐系统源码 (PC版+手机版+商户版) 注意:不带技术支持,有帮助文件,虚拟商品,发货不退,看好再拍。 开发语言 : C# 数据库 : SQL2008 开发工具 : VS2012 源码类型 : WebForm 菜单功能: 一....
(1)面向对象性 ASP.NET将C#作为一种面向对象语言,在很多方面来看,C#将成为微软的与Java相似的语言。 C#是ASP.NET开发中一个最重要的功能,微软会将C#发展成为Java的强劲对手。这也是微软.NET框架的一个重要组成...
(1)面向对象性 ASP.NET将C#作为一种面向对象语言,在很多方面来看,C#将成为微软的与Java相似的语言。 计算机设计开题报告范文(1)全文共10页,当前为第1页。C#是ASP.NET开发中一个最重要的功能,微软会将C#发展成为...
112 <br>0188 如何在ASP.NET中显示当前IE浏览器头信息 113 <br>5.6 其他应用技巧 114 <br>0189 如何判断年份是否为闰年 114 <br>0190 如何根据年份判断十二生肖 114 <br>0191 如何根据IP...