打印

有没有一种路由器可以读取外网ip

[复制链接]
2337|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
BitFu|  楼主 | 2018-12-19 20:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
tianxj01| | 2018-12-20 16:59 | 只看该作者
对于路由器,外网和任何其他设备没有什么不同,外网设备应答成功,就可以完全识别出外网IP啊。
倒是内网设备,会产生IP隔离,解决这个问题,这就是我们好多软件,说的内网穿透功能什么的,其实也很好理解,外网设备请求路由器IP,路由器如果不知道往哪个局域网主机转发,这时候,就产生IP定向错误,通信失败,对于那些挂内网的广域网应用设备,就需要我们在路由器里面,进行特定端口,特定协议的定向转发设置。

使用特权

评论回复
板凳
BitFu|  楼主 | 2018-12-22 09:32 | 只看该作者
我的主要目的是想减少物联网设备与服务器间的数据通信量,比如如果内网内的设备(传感器)能够获得外网IP,那么就把它上传给服务器,终端再从服务器获取IP后直接连接到内网设备,路由器上的外网IP虽然是动态的但在某一段时间内是不变的,内网设备如果获取到外网IP后比对如果发生变化就重新更新服务器上的记录。

使用特权

评论回复
地板
tianxj01| | 2018-12-23 10:49 | 只看该作者
本帖最后由 tianxj01 于 2018-12-23 11:05 编辑
BitFu 发表于 2018-12-22 09:32
我的主要目的是想减少物联网设备与服务器间的数据通信量,比如如果内网内的设备(传感器)能够获得外网IP ...

总算明白你的问题了,是需要获取路由器本身的动态公网IP。
在windows 控制台 输入 ping -n 1 -r 9 www.163.com  也可以是别的网址,比如你地区用的公网网络DNS,这样返回信息最简洁。
在应答信息里面,你可以获取到路由器外网IP了。
你可以自己在控制台里面输入,测试一下看看控制台信息。
至于程序里面怎么实现,你自己去动脑筋了。

使用特权

评论回复
5
BitFu|  楼主 | 2018-12-23 13:37 | 只看该作者
本帖最后由 BitFu 于 2018-12-23 13:38 编辑

还是搞不明白,加上 -r   9   就ping不上了  

ping -r 9 www.163.com >d:\a.txt  命令结果:

正在 Ping www.163.com.lxdns.com [222.44.151.69] 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。

222.44.151.69 的 Ping 统计信息:
    数据包: 已发送 = 3,已接收 = 0,丢失 = 3 (100% 丢失),
Control-C


ping -r 9 211.138.91.1 >d:\b.txt 命令结果:

正在 Ping 211.138.91.1 具有 32 字节的数据:
请求超时。
请求超时。

211.138.91.1 的 Ping 统计信息:
    数据包: 已发送 = 2,已接收 = 0,丢失 = 2 (100% 丢失),
Control-C

使用特权

评论回复
6
li_mu| | 2018-12-23 14:54 | 只看该作者
tianxj01 发表于 2018-12-23 10:49
总算明白你的问题了,是需要获取路由器本身的动态公网IP。
在windows 控制台 输入 ping -n 1 -r 9 www.163 ...

这个动态地址获取有没有用,是不是外网是无法通过这个ping过来?
因为外网要映射好几次(过运营商服务器时候)

使用特权

评论回复
7
tianxj01| | 2018-12-23 16:02 | 只看该作者
li_mu 发表于 2018-12-23 14:54
这个动态地址获取有没有用,是不是外网是无法通过这个ping过来?
因为外网要映射好几次(过运营商服务器 ...

完全可以啊:
ping -n 1 -r 9 www.163.com > c:\list.txt
linst.txt
正在 Ping www.163.com.lxdns.com [120.209.142.15] 具有 32 字节的数据:
来自 120.209.142.15 的回复: 字节=32 时间=95ms TTL=57
    路由: 112.26.10.32 ->
           111.39.98.138 ->
           120.210.228.58 ->
           120.210.192.245 ->
           120.210.192.165 ->
           120.210.192.117 ->
           120.209.142.1 ->
           120.209.142.15 ->
           120.209.142.15

120.209.142.15 的 Ping 统计信息:
    数据包: 已发送 = 1,已接收 = 1,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 95ms,最长 = 95ms,平均 = 95ms

使用特权

评论回复
8
li_mu| | 2018-12-23 21:39 | 只看该作者
tianxj01 发表于 2018-12-23 16:02
完全可以啊:
ping -n 1 -r 9 www.163.com > c:\list.txt
linst.txt

我发现用这个ping百度(www.baidu.com)好像不好使

使用特权

评论回复
9
BitFu|  楼主 | 2018-12-23 22:36 | 只看该作者
本帖最后由 BitFu 于 2018-12-23 22:42 编辑

这和网络提供商有关系,移动的网(至少我这里)根本用不了这个命令

tracert可以用,但是第二个IP地址根本不是我的路由器的外网IP
tracert 163.com >d:\a.txt 命令结果如下:

通过最多 30 个跃点跟踪
到 163.com [123.58.180.7] 的路由:

  1     2 ms     3 ms     1 ms  192.168.1.1 //只显示了路由器内网IP
  2     6 ms     3 ms     9 ms  122.76.228.1 //路由器IP实际上是122.76.229.17,和这个接近啊
  3    33 ms    13 ms     9 ms  222.39.162.101
  4     5 ms     3 ms     3 ms  222.39.162.201
  5     7 ms     5 ms     3 ms  222.39.164.70
  6     4 ms     5 ms     4 ms  111.56.100.33
  7     *        *        *     请求超时。
  8     4 ms     4 ms     3 ms  221.183.13.105
  9    12 ms    14 ms    13 ms  221.183.9.117
10    39 ms    36 ms    72 ms  

使用特权

评论回复
10
tianxj01| | 2018-12-24 08:53 | 只看该作者
本帖最后由 tianxj01 于 2018-12-24 08:55 编辑
BitFu 发表于 2018-12-23 22:36
这和网络提供商有关系,移动的网(至少我这里)根本用不了这个命令

tracert可以用,但是第二个IP地址根 ...

路由追踪,出现的第2个,应该是你的网关,还真不一定是你的外网地址。
如果 ping -n 1 -r 9 在你的供应商哪里不好用,应该还有别的办法,我看看哈。
你可以这样做:
用HTTP协议,在程序中,请求www.ip138.com/地址,解析返回的html,
其中返回的字符串有这样的关键词:您的IP是:[xxx.xx.xx.xxx],从返回的字符串中用正则表达式提取外网ip地址即可。
这个应该是任何供应商都绝对必须完全支持的。

使用特权

评论回复
11
BitFu|  楼主 | 2018-12-24 12:51 | 只看该作者
tianxj01 发表于 2018-12-24 08:53
路由追踪,出现的第2个,应该是你的网关,还真不一定是你的外网地址。
如果 ping -n 1 -r 9 在你的供应商 ...

这个办法很早就试过了,一般来说应该可以,但是移动的网络比较复杂
现在我的路由器IP是:“IP 地址: 122.76.239.96 PPPoE ”,这是个原铁通的IP地址,从外网可访问的。
但在ip138上显示的是 211.138.88.101,这是个移动的IP,也就是说服务器端得到的也不是我的路由器WAN口IP.
所以目前能想到的唯一办法就是从路由器网页上获取外网IP,如果路由器支持某种接口直接读取WAN口IP那最好不过了。

使用特权

评论回复
12
tianxj01| | 2018-12-24 14:59 | 只看该作者
本帖最后由 tianxj01 于 2018-12-24 15:11 编辑
BitFu 发表于 2018-12-24 12:51
这个办法很早就试过了,一般来说应该可以,但是移动的网络比较复杂
现在我的路由器IP是:“IP 地址: 122 ...

那就用.net爬虫。
C#模拟web请求,把返回的response解析下,对于路由器需要登陆信息稍微复杂一点,抓取的时候还要带上登录信息,爬虫代码、资料满天飞的吧,抄抄改改就应该可以用了。
对于那些动态页面的路由器,可以用Python,具体的可以参考这个:
https://blog.csdn.net/lyffly2011/article/details/50485398

使用特权

评论回复
13
z_no1| | 2018-12-26 17:05 | 只看该作者
BitFu 发表于 2018-12-24 12:51
这个办法很早就试过了,一般来说应该可以,但是移动的网络比较复杂
现在我的路由器IP是:“IP 地址: 122 ...

有可能是铁通的IP又转发给了移动的那个IP,所以对IP138来说,你还是从移动那个IP出来的?

使用特权

评论回复
14
BitFu|  楼主 | 2018-12-27 12:12 | 只看该作者
z_no1 发表于 2018-12-26 17:05
有可能是铁通的IP又转发给了移动的那个IP,所以对IP138来说,你还是从移动那个IP出来的? ...

是的,铁通和移动现在是一家,所以他们内部怎么转的就搞不清楚了,可以确定的是我的路由器IP是到不了服务器的,数据包只能从移动的IP向外发。所以获取外网IP只能从路由器上想办法。

使用特权

评论回复
15
BitFu|  楼主 | 2018-12-27 12:16 | 只看该作者
tianxj01 发表于 2018-12-24 14:59
那就用.net爬虫。
C#模拟web请求,把返回的response解析下,对于路由器需要登陆信息稍微复杂一点,抓取的 ...


谢谢这位兄弟!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:芯艺工作室

194

主题

1053

帖子

3

粉丝