请问如何获得路由器广域网的IP地址和端口号 ??
本帖最后由 code 于 2012-6-27 15:20 编辑请问如何获得路由器广域网的IP地址和端口号 ??
在internet网络里面,经常使用到的一个概念就是NAT地址转换
下面的电脑A运行QQ程序,想访问服务器,电脑A把数据报发送给路由器B
路由器B收到了数据报之后,就创建一个Session.
把电脑A的IP192.168.0.2 端口号8000 和他自身广域网的183.60.48.85 端口号100绑定起来
然后就把数据就转发给深圳腾信的服务器183.60.48.86
以后凡是有数据发送到 路由器183.60.48.85 端口号100
都会转发给电脑A
我想问,在实际使用当中电脑A是需要知道路由器B出口的IP ,
请问,站在电脑A的角度来讲,电脑A如何知道这个IP( 183.60.48.85 )和端口号( 100 ) 谢谢!!!
________________________________________
| 183.60.48.86 |
| 深圳腾信的服务器 |
|________________________________________|
|
________________________________________
| 183.60.48.85 : 100 |
| 路由器B 桥接 |
| 192.168.0.1 |
|________________________________________|
|
________________________________________
| 电脑A |
| 192.168.0.2 : 8000 |
|________________________________________| 1、固定IP和端口。
2、通过DNS得到IP,端口固定。 本帖最后由 code 于 2012-6-27 19:36 编辑
请问如何获得路由器广域网的IP地址和端口号 ??
在internet网络里面,经常使用到的一个概念就是NAT地址转换
下面的电脑A运行QQ程序,想访问服务器,电脑A把数据报发送给路由器B
路由器B收到了数据报之后,就创建一个Session.
把电脑A的IP192.168.0.2 端口号8000 和他自身广域网的183.60.48.85 端口号100绑定起来
然后就把数据就转发给深圳腾信的服务器183.60.48.86
以后凡是有数据发送到 路由器183.60.48.85 端口号100
都会转发给电脑A
我想问,在实际使用当中电脑A是需要知道路由器B出口的IP ,
请问,站在电脑A的角度来讲,电脑A如何知道这个IP( 183.60.48.85 )和端口号( 100 ) 谢谢!!!
__________________ _____________________
| 183.60.48.86 | | 电脑E |
| 深圳腾信的服务器 | | 192.168.0.2 :8001 |
|___________________| |____________________|
| |
______________________ ______________________
| 183.60.48.85 : 100 | |192.168.0.1 |
| 路由器B 桥接 | <----> | 路由器C 桥接 |
| 192.168.0.1 | | 183.60.48.84 : 300 |
|_____________________| |_____________________|
|
_____________________
| 电脑A |
| 192.168.0.2 : 8000 |
|_____________________|
单纯的电脑A和深圳腾信的服务器通信,那么当然是可以直接发送的
但是有时候却需要知道网关出口绑定Session
因为 电脑A 和 电脑E 都是局部网络
他们不能互相通信,
如果想电脑A 和 电脑E 他们之间通信也可以
那么就要借助 处于公网的深圳腾信的服务器(IP 183.60.48.86 )
步骤如下:
1 . 首先 电脑A 往深圳腾信的服务器(IP 183.60.48.86 )发送数据
2 . 路由器B 创建BSession , 并且把
电脑A的IP192.168.0.2 端口号8000 和他自身广域网的183.60.48.85 端口号100绑定起来
183.60.48.85:100 绑定起来
192.168.0.2:8000
3 . 再有电脑E往深圳腾信的服务器(IP 183.60.48.86 )发送数据
4 . 路由器C 创建Session , 并且把
电脑E的IP192.168.0.2 端口号8001 和他自身广域网的183.60.48.85 端口号300绑定起来
183.60.48.85:300 绑定起来
192.168.0.2:8001
5 . 无论
电脑A和腾信的服务器(IP 183.60.48.86 )通信
还是
电脑B和腾信的服务器(IP 183.60.48.86 )通信
这一点都很容易理解,也容易实施
6 . 关键就是电脑A如何知道 路由器B 桥接出口的IP地址(183.60.48.85)和端口号(100)
一但电脑A知道了这个IP和端口号
那么电脑A就在报文载荷当中携带这个IP地址(183.60.48.85)和端口号(100)信息,并且告诉给腾信的服务器
腾信的服务器在报文载荷当中携带这个IP地址(183.60.48.85)和端口号(100)信息,并且告诉给电脑E
那么电脑E就知道了电脑A的对外IP地址(183.60.48.85)和端口号(100)信息
以后电脑E要给电脑A通信,那么就尽管往路由器B( 183.60.48.85 : 100 )发送就可以了
不用再麻烦腾信的服务器
7 . 请问,站在电脑A的角度来讲,电脑A如何知道这个IP( 183.60.48.85 )和端口号( 100 ) 谢谢!!! 7 . 请问,站在电脑A的角度来讲,电脑A如何知道这个IP( 183.60.48.85 )和端口号( 100 )
code 发表于 2012-6-27 19:20 https://bbs.21ic.com/images/common/back.gif
你真正想知道的,是不是如何让 183.60.48.86 知道 183.60.48.85:XXXXX 就是 电脑 A(192.168.0.2:8000),而 183.60.48.85:YYYYY 就是 电脑 B(192.168.0.2:8001) ?
很简单一句话,路由器已经把 IP 地址替换了。
整个过程是这样的:
电脑 A,以其自身的 IP 地址(192.168.0.2)和端口(8000) 访问服务器(183.60.48.86) 时,网络层根据目的 IP 地址 和 子网掩码得知,服务器(183.60.48.86) 不在本网段,于是网络层会把 IP 包发往网关(路由器B)。
路由器收到此 IP 包,并从 IP header/TCP header/UDP header 中得知了“目的 IP 地址:端口”和“源 IP 地址:端口”,就可以建立一个 session(实际上就是一个映射关系),并且把 IP 包中的“源 IP 地址:端口”替换为路由器的 IP 和一个新端口,然后把修改过后的 IP 包发往服务器(183.60.48.86)。
服务器收到 IP 包后,从 header 中知道“源 IP 地址:端口”是路由器 B 的,而并不知道(不需要知道,也不可能知道)其真正的源是“电脑 A”。
服务器需要发送数据(IP 包)到电脑 A 时,上面说了,服务器不知道电脑 A,它只需要把 IP 包发送“回”路由器 B 就行了,路由器 B 再根据刚才建立的 session 映射关系,找到真正的目的“电脑 A”,并把 IP 包的“目的 IP 地址:端口”修改为 session 所记录的电脑 A 的 IP 地址:端口,然后把 IP 包发送给电脑 A。 搞得这么复杂干嘛。。 内网要知道映射的外网IP与端口,是需要外网服务器配合的。内网请求后,外网服务器将公网IP和端口发送回内网。 LS说得对 本帖最后由 code 于 2012-6-28 12:22 编辑
非常感谢上面几位大侠的帮忙
___________________
| 202.96.134.132 |
| 21ic北京的服务器 |
|___________________|
|
______________________
| 202.96.134.133 |
| 路由器Y 桥接太平洋 |
| 113.67.157.230 |
|_____________________|
|
______________________
| 113.67.157.231 :501 |
| 路由器X 出口在美国 |
|192.168.0.1 :300 |
|_____________________|
|
______________________
| 192.168.0.3 |
| 电脑A在美国 |
|_____________________|
假如电脑A在美国访问21ic
1 . 那么21ic北京的服务器能否看见我的在美国的IP ( 183.60.48.85 )
2 . 我在21ic的帐号资料里面能否显示我在美国的IP ( 183.60.48.85 )
3 . 请问如何知道路由器X的绑定关系 ???
113.67.157.231 :501绑定
192.168.0.1 :300 服务器把你的外网IP发给你 你自己知道内网IP这不就是对应关系了么
不过呢楼主为啥要知道这个对应关系呢说说应用场景吧别让大家猜谜了 搜了一下LZ的贴子,看起来LZ应该是做硬件底层开发的。
估计LZ想从外网直接访问内网的设备,但又不想在网关上添加端口映射条目。
那唯一的办法,就是架设一台外网的中转服务器。通过中转服务器得知要访问内网设备的对应公网IP及端口。但这还有一个问题。TCP映射是一对一的,你不可能通过这种方式访问到。唯一可行的办法就是UDP通讯。但这个比较复杂,LZ还要多研究研究。。如果想速成,建议找个熟悉这一块的朋友烟酒烟酒。。:D 楼主想打洞吗?google一下“TCP 打洞”“UDP 打洞”,其实也不难的。 LZ,实际上电脑A什么都不需要知道。
电脑A只要知道子网掩码满足的直接ARP后发对应IP地址;子网掩码不满足的ARP后发网关IP即可。
至于路由器、端口号等,它完全不需要考虑。外部网络对于它完全是透明的,它根本不需要管它经过了什么线路、什么设备,就更不用说去操心哪个路由器、哪个端口了。 就好比你寄信,室内的可以当然可以直接送到对方手里(也可间接);而外发的,你只要填好接收人地址姓名然后贴上邮票扔进邮筒即可,你需要关心信是怎么送的、是谁送的、经过那个中转点那个邮袋吗? 结贴给分
非常感谢上面几位大侠的帮忙
我现在明白了一点点了 再次谢谢
电脑A访问21ic北京的服务器,那么就在路由器Y建立session绑定关系,21ic北京的服务器也知道这个绑定关系
21ic北京的服务器回传给电脑A,在报文当中包含这个信息(路由器Y的session绑定关系) ,
这就是原野之狼所说的外网服务器把答案告诉电脑A
其实我也知道只要知道的路由器Y的session绑定关系,其他的内网机器也是可以访问电脑A
但是
我的意思是问如何知道整条连接链是如何的 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
___________________
| 202.96.134.132 |
| 21ic北京的服务器 |
|___________________|
|
______________________
| 202.96.134.133 |
| 路由器Y 桥接太平洋 |
| 113.67.157.230 |
|_____________________|
|
______________________
| 113.67.157.231 :501 |
| 路由器X 出口在美国 |
|192.168.0.1 :300 |
|_____________________|
|
______________________
| 192.168.0.3 |
| 电脑A在美国 |
|_____________________| 13# code
你理解错了,路由器中的NAT SESSION 无论内部还是外部都是不可能直接知道的。
如果做了多次NAT,就更复杂了。中间的NAT SESSION,普通的方法基本不可能知晓。
你要明白你自己的最终需求即可。不必要关心中间的路由信息。这些信息对于你来说,都是透明的。可以直接无视。。 LZ对问题的需求一直描叙不清啊~
你如果只是想“知道整条连接链是如何的”,执行DOS命令:
tracert IP地址
即可,但这个是基于ICMP协议的,而很多设备都是过滤、屏蔽ICMP包,所以实际上是很难得到完整路径的信息的。(而路由设备本身只需要知道和转换上下游各一层交换的的直接映射关系,而且不会传出来多余的信息,所以其他方法也是得不到完整路径的信息的。)
至于tracert,网上很容易找到 源码的 嘿嘿看看steven先生的TCP/IP的书吧
在具有多级NAT的情况下 依靠第三方服务器的帮助仅能知道最外层NAT的公网IP 映射关系是不知道的
除非只有一层NAT 那么根据我之前说的方法就能得出了
老x提到 trace...之类的ICMP包会被很多设备过滤 所以用这方式也作用不大
最后 还是想问问 楼主的应用场景到底是啥呢
请问
本帖最后由 code 于 2013-4-2 13:47 编辑请问如何获得路由器广域网的IP地址和端口号 ??
在internet网络里面,经常使用到的一个概念就是NAT地址转换
下面的电脑A运行QQ程序,想访问服务器,电脑A把数据报发送给路由器B
路由器B收到了数据报之后,就创建一个Session.
把电脑A的IP192.168.0.2 端口号8000 和他自身广域网的183.60.48.85 端口号100绑定起来
然后就把数据就转发给深圳腾信的服务器183.60.48.86
以后凡是有数据发送到 路由器183.60.48.85 端口号100
都会转发给电脑A
我想问,在实际使用当中电脑A是需要知道路由器B出口的IP ,
请问,站在电脑A的角度来讲,电脑A如何知道这个IP( 183.60.48.85 )和端口号( 100 ) 谢谢!!!
修改内容
本帖最后由 code 于 2013-4-2 13:45 编辑修改内容
这两个地址都是 public ip
hu@super-x:~$ ping 113.119.184.90
PING 113.119.184.90 (113.119.184.90) 56(84) bytes of data.
64 bytes from 113.119.184.90: icmp_req=1 ttl=54 time=17.3 ms
64 bytes from 113.119.184.90: icmp_req=2 ttl=54 time=16.9 ms
64 bytes from 113.119.184.90: icmp_req=3 ttl=54 time=14.7 ms
64 bytes from 113.119.184.90: icmp_req=4 ttl=54 time=13.4 ms
64 bytes from 113.119.184.90: icmp_req=5 ttl=54 time=32.5 ms
64 bytes from 113.119.184.90: icmp_req=6 ttl=54 time=26.5 ms
64 bytes from 113.119.184.90: icmp_req=7 ttl=54 time=25.5 ms
64 bytes from 113.119.184.90: icmp_req=8 ttl=54 time=26.2 ms
64 bytes from 113.119.184.90: icmp_req=9 ttl=54 time=23.4 ms
64 bytes from 113.119.184.90: icmp_req=10 ttl=54 time=22.2 ms
64 bytes from 113.119.184.90: icmp_req=11 ttl=54 time=21.1 ms
64 bytes from 113.119.184.90: icmp_req=12 ttl=54 time=20.4 ms
64 bytes from 113.119.184.90: icmp_req=13 ttl=54 time=19.6 ms
64 bytes from 113.119.184.90: icmp_req=14 ttl=54 time=18.4 ms
64 bytes from 113.119.184.90: icmp_req=15 ttl=54 time=17.1 ms
64 bytes from 113.119.184.90: icmp_req=16 ttl=54 time=16.1 ms
^C
--- 113.119.184.90 ping statistics ---
16 packets transmitted, 16 received, 0% packet loss, time 15022ms
rtt min/avg/max/mdev = 13.414/20.746/32.570/4.957 ms
hu@super-x:~$ ping 113.119.184.1
PING 113.119.184.1 (113.119.184.1) 56(84) bytes of data.
64 bytes from 113.119.184.1: icmp_req=1 ttl=246 time=5.67 ms
64 bytes from 113.119.184.1: icmp_req=2 ttl=246 time=5.53 ms
64 bytes from 113.119.184.1: icmp_req=3 ttl=246 time=5.80 ms
64 bytes from 113.119.184.1: icmp_req=4 ttl=246 time=5.43 ms
64 bytes from 113.119.184.1: icmp_req=5 ttl=246 time=5.58 ms
64 bytes from 113.119.184.1: icmp_req=6 ttl=246 time=5.66 ms
64 bytes from 113.119.184.1: icmp_req=7 ttl=246 time=5.48 ms
64 bytes from 113.119.184.1: icmp_req=8 ttl=246 time=5.73 ms
^C
--- 113.119.184.1 ping statistics ---
8 packets transmitted, 8 received, 0% packet loss, time 7011ms
rtt min/avg/max/mdev = 5.439/5.613/5.803/0.118 ms 如下图是我的个人资料,显示我的IP是113.119.184.90
再结合我在17楼的信息那么我的路由出口是113.119.184.1
请问21IC 是如何知道我的IP 113.119.184.90???
按道理来讲21IC 只能知道最靠近他的那个路由器(211.167.8 ...
code 发表于 2012-6-29 16:20 https://bbs.21ic.com/images/common/back.gif
LZ折腾了这么久,原来就是这个应用。
给你两个方向。
一是代理方式,所有内部设备都登记到公网服务器上,要与内部设备通讯,通过公网服务器转发。这个最简单。
二是UDP打洞,这个比较复杂,不一定能兼容所有NAT设备(当然目前很少有这类NAT设备无法打洞),如果你的结点不多的话,不如上一种方式来得快和稳定。
页:
[1]
2