一个关于IP地址、ICMP、NAT、Scoket的问题。一直想不明白。分不够可以另外开帖子。

dancetime 2003-11-02 02:57:53
有一台处于NAT1后的机器A,想知道NAT1的服务器的公网地址。能否通过向网络上的某台机器发送一个需要回送类型的ICMP包,然后根据回送的信息中的IP首部中的目标地址来得到NAT1服务器的公网地址?

看资料上是这样说的:

回送或回送响应消息

回送消息的源地址是回送响应消息的目的地址。若要形成一个回送响应消息,应该将源和目的地址交换,将类型代码更改为0,重新计算机校验码。

如何将源和目的地址交换?是系统内核完成这个工作吗?另外。从A机器经过NAT1的服务器发给机器B的ICMP包中,源地址是NAT1服务器的地址吗?B机器的回送信息的目标地址是NAT1服务器的地址吗?还是在两台机器中要经过的一个路由器的地址呢?

...全文
115 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dancetime 2003-11-02
  • 打赏
  • 举报
回复
谢谢iq199(iq199)的解答。
iq199 2003-11-02
  • 打赏
  • 举报
回复

NAT=网络地址翻译,NAT的工作就是地址翻译,看下面的翻译过程。
从A发给B的包
在该包从A发出时,源地址是A的地址;
该包到达NAT,地址将会被NAT改变,该包从NAT发向B时,源地址是NAT的公网地址。
从B返回A的包
在该包从B发出时,目的地址是NAT的公网地址。(不会是在两台机器中要经过的一个路由器的地址)
该包到达NAT,地址将会被NAT改变,该包从NAT发向A时,目的地址是A的地址;
因此,通过从A向B发送ICMP(ECHO)包,并查看返回包的IP首部的目标地址,不能确定NAT的公网地址;

你可以通过在发送的ICMP(ECHO)包头,设置RR选项。来记录往返路径中路由器地址。
(参加TCP/IP详解第7.3章)

另外,上面提到的NAT的公网地址严格的说是不正确的。
一个NAT通常配置一个内部IP地址(在内部接口上)和一个外部IP地址(在外部接口上)
还可配置多个NAT转换的目标外部IP地址。因此转换后的外部IP地址可能是多个外部IP地址之一,但通常不会是外部接口上配置的IP地址。

源和目的地址交换是系统内部IP模块完成的。
dancetime 2003-11-02
  • 打赏
  • 举报
回复
如何取得这个地址呢?
cmsbai 2003-11-02
  • 打赏
  • 举报
回复
从A机器经过NAT1的服务器发给机器B的ICMP包中,源地址是NAT1服务器的地址。
从A机器经过NAT1的服务器发给机器B的ICMP包中,源地址是NAT1服务器的地址。
服务器一般再根据服务端口来判断网内的A机。

18,357

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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