得到本机在公网IP地址

ch5201314zt 2010-05-14 10:25:32
编写了一个通讯软件,现在发送消息的时候出现问题了.
局域网的机器之间互相通信好实现,运行到广域网以后就检索不到IP地址了.
请问如何得到运行本软件后本机在公网上的IP地址?
或者说大家提供给我一个实现的思路?
不胜感激,倾家荡产了.
WINFORM
顶一下也是一种支持!
...全文
1533 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
jj_zerogra 2010-05-28
  • 打赏
  • 举报
回复
5L的打洞是什么意思?
wxm3630478 2010-05-16
  • 打赏
  • 举报
回复
mark...
heword999 2010-05-16
  • 打赏
  • 举报
回复
友情帮顶!
ch5201314zt 2010-05-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wjq 的回复:]
互联网通信,你要考虑到运行你程序的机器可能是在一个内网中的,你无法直接访问,或者通过路由将你的端口映射到公网的某个随机端口上等等情况。

互联网通信你最好假设一个服务器,接收来自客户端的请求,然后中转或者搭个线告诉双方对方的ip和端口
[/Quote]
搭个线告诉双方对方的ip和端口
这个是如何实现的哩?
路人乙e 2010-05-14
  • 打赏
  • 举报
回复
string myip = new Regex(@"ClientIP: \[([\d.]+?)\]").Match(new System.Net.WebClient().DownloadString("http://www.skyiv.com/info/")).Groups[1].Value;
wjq 2010-05-14
  • 打赏
  • 举报
回复
互联网通信,你要考虑到运行你程序的机器可能是在一个内网中的,你无法直接访问,或者通过路由将你的端口映射到公网的某个随机端口上等等情况。

互联网通信你最好假设一个服务器,接收来自客户端的请求,然后中转或者搭个线告诉双方对方的ip和端口
ch5201314zt 2010-05-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 laowu_ 的回复:]
2楼的那个就可以啊
[/Quote]
二楼写了两个方法,第一个方法是你在电信上网的时候电信给你分配的动态IP地址
第二个方法是得到的局域网上的IP
ch5201314zt 2010-05-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hack95 的回复:]
内网向外网通信,使用的是外网一个随机端口。
通过打洞可以实现双方通信。
[/Quote]

可以具体一点吗?
柳晛 2010-05-14
  • 打赏
  • 举报
回复
内网向外网通信,使用的是外网一个随机端口。
通过打洞可以实现双方通信。
_JeffreyWu 2010-05-14
  • 打赏
  • 举报
回复
2楼的那个就可以啊
ch5201314zt 2010-05-14
  • 打赏
  • 举报
回复
谢谢 是WINFORM程序

http://www.ip138.com/ip2city.asp这个网址解析出来的是动态IP
九章落地 2010-05-14
  • 打赏
  • 举报
回复

//创建类
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;

/// <summary>
///GetOutIP 的摘要说明
/// </summary>
public class GetOutIP
{
private string strgetIP;


public GetOutIP()
{
//
//TODO: 在此处添加构造函数逻辑
//
netIP();
getIP();

}

public string renetIP()
{ return netIP(); }//返回网络IP

public string regetIP()
{ return strgetIP; }//返回内网IP


static string netIP()
{
Uri uri = new Uri("http://www.ip138.com/ip2city.asp");//查本机网络IP的网页
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = 0;
req.CookieContainer = new CookieContainer();
req.GetRequestStream().Write(new byte[0], 0, 0);
HttpWebResponse res = (HttpWebResponse)(req.GetResponse());
StreamReader rs = new StreamReader(res.GetResponseStream(), Encoding.GetEncoding("GB18030"));
string s = rs.ReadToEnd();
rs.Close();
req.Abort();
res.Close();
s = s.Substring(s.IndexOf('[') + 1, s.Length - s.LastIndexOf(']') -11); //自己灵活取出IP
return s;
//Match m = Regex.Match(s, @"IP:\[(?<IP>[0-9\.]*)\]");
//if (m.Success) return m.Groups["IP"].Value;
//string strnetIP = string.Empty;
//return strnetIP;


}

public string getIP()//注意与static 的区别
{
System.Net.IPAddress[] addressList = Dns.GetHostByName(Dns.GetHostName()).AddressList;//获取本机内网IP


strgetIP = addressList[0].ToString();
return strgetIP;

}
}



----------
三易通软件(三易通服装进销存软件,三易通服装进销存管理软件,三易通服装进销存管理系统,三易通服装店管理软件,三易通服装店管理系统,三易通服装销售管理软件,三易通服装销售管理系统,三易通服装零售管理软件,三易通服装零售管理系统,三易通服装店软件,三易通服装店收银软件)http://www.3etsoft.cn
wuyq11 2010-05-14
  • 打赏
  • 举报
回复
static string GetPage(string url)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
try
{
using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
{
using (StreamReader sr = new StreamReader(res.GetResponseStream()))
{
return sr.ReadToEnd();
}
}
}
catch (System.Exception e)
{
return e.Message;
}
finally
{
req.Abort();
}
}
// 通过外部网站得到本机的外部IP
static string GetOuterIP()
{
string patt = @"IP: \[(? <IP>[0-9\.]*)\]";
string url = "";
return Regex.Match(GetPage(url), patt).Groups["IP"].Value;
}

static void Main()
{
foreach (IPAddress ip in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
{
Console.WriteLine(ip);
}
Console.WriteLine();
Console.WriteLine(GetOuterIP());
}
web services
影子_爱人 2010-05-14
  • 打赏
  • 举报
回复
顶 支持 接分
Maryneet 2010-05-14
  • 打赏
  • 举报
回复
路过,有兴趣,可惜不懂。帮顶一下
myhope88 2010-05-14
  • 打赏
  • 举报
回复
2楼的就可行
ch5201314zt 2010-05-14
  • 打赏
  • 举报
回复
打洞的前提是我得知道对方的IP地址吧?
有没有做过类似软件的? 可以跟我说说具体咋么实现的嘛?
wangwenzhuang 2010-05-14
  • 打赏
  • 举报
回复
顶一下也是支持
a569673493 2010-05-14
  • 打赏
  • 举报
回复
打洞。。。
加载更多回复(3)
Re:CCNA_CCNP 思科网络认证 PAT NAT 端口或地址转换 与端口映射======================# 本章课程大纲        公网地址和私网地址        NAT应用场景        静态NAT  :static  地址转换        动态NAT  :dynamic地址转换        PAT        :端口地址转换        端口映射 :port map        在Windows上同时实现的NAT和端口映射 # 私网地址三类 A类:10.0.0.0                                255.0.0.0(1网段) B类:172.16.0.0 -172.31.0.0         255.255.0.0(16网段) C类:192.168.0.0-192.168.255.0  255.255.255.0(255网段) # NAT 的使用场景        NAT的最初的目的是允许把私有IP地址映射到公网地址,以减缓IP地址空间的消耗。        当一个组织更换它的互联网服务提供商ISP,但不想更改内网配置方案时,NAT同样很有用途。        以下是适于使用NAT的多种情况:         企业内网接入Internet节省公网地址         单向访问         大方向:内网访问互联网(互联网上主机不能够访问内网主机)         小方向:同单位实现两个网段之间单向访问(涉密部门能够访问其他部门,反之不可)         增加一个网段          避免在主干路由器增加到这个网段的路由         在Windows上实现的NAT和端口映射 # 网络地址转换的类型        下面介绍一下NAT的三种类型。         静态NAT 是为了在私网地址和公网地址间,允许一对一映射而设计的。         或者IPv4和IPv6之间的转换(典型)         不节省公网地址,故公网地址的利用效率不高,         无任何安全性,外网可以通过公网地址直接攻击内网主机,好像只增加路由器的工作         适用场景类似代理,可以较方便的更换主机,而无需修改路由器的配置         故应用不够广泛...         动态NAT 可以实现映射一个未注册 IP地址到注册IP地址池中的一个注册IP地址。         多对一,或多对多         比较PAT优势:避免被误认为攻击而被封ip地址         不太节省地址,应用不广泛         复用是最流行的NAT配置类型,也被称为端口地址映射(PAT)。         通过使用PAT,可实现上千个用户仅通过一个真实的全球 IP地址连接到Internet。         缺点:增加延迟,消耗路由器性能 # 端口映射(port mapping) 允许Internet上的计算机通过企业路由器的公网IP地址访问到内网的服务器------------------------------------------------         

110,580

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧