C# asp.net获取外网IP
2012-01-17 06:32
80 查看
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 阅读更多
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 阅读更多
相关文章推荐
- c#(asp.net)获取机器信息(IP)(MAC)(机器名)(CPU编号)(主硬盘编号)
- ASP.NET获取IP与MAC[using C#]
- ASP.NET,C#获取客户端IP
- ASP.NET获取IP与MAC[using C#]
- C# .net 获取外网ip
- ASP.NET获取IP和MAC代码(C#)
- C#/.NET获取本机的外网IP地址的简单方法
- ASP.NET 获取客户端外网IP地址
- ASP.NET获取IP与MAC[using C#]
- c# 、 Asp.net 获取本地IP和MAC地址
- ASP.NET获取外网IP,并获取该IP所在城市地区名
- ASP.NET 怎么获取客户端的外网IP地址
- ASP.NET(C#)中如何获取IP,名称,操作系统,浏览器等信息
- [导入]ASP.NET获取IP与MAC[using C#]
- ASP.NET获取IP与MAC[using C#]
- ASP.NET获取IP与MAC[using C#]
- ASP.NET获取IP与MAC[using C#]
- ASP.NET(C#)中获取IP,名称,操作系统,浏览器等信息代码大全
- 获取真实IP和代理IP (asp.net C#)
- ASP.NET获取IP与MAC[using C#]