作者:上海悠u7_ | 来源:互联网 | 2023-07-08 13:44
假设如下的网络环境:ADSL上网,本机配置的局域网地址为192.168.1.100,ADSL的虚拟网络地址为58.212.135.131,需要访问的公网服务器为231.110.231.112,在公网服
假设如下的网络环境:ADSL上网,本机配置的局域网地址为192.168.1.100,ADSL的虚拟网络地址为58.212.135.131,需要访问的公网服务器为231.110.231.112,在公网服务器上由一个基于TCP协议的SocketServer程序,从192.168.1.100向服务器发起一个网络连接,在Accept这个连接后,从该连接获取的源地址58.212.135.131,现在的问题是如果在内核中操作,从IP层获取该包头信息,获取到的时192.168.1.100还是58.212.135.131,或者是其他IP地址?如果获取的不是192.168.1.100,那么是否有什么方法可以在内核中获取该地址?
7 个解决方案
在公网服务器上是获取不到192.168.1.100的,这是个内网地址。如果你ADSL上网是通过NAT路由器的话,在路由器里源IP就被改掉了。
如果你是用windows自带的pppoe的话,那么根本就用不到192.168.1.100这个ip。
IP包头在经过路由转发时是否会被修改
=====================
会啊,至少TTL会被修改。
谢谢各位,我测试了一下,应该是无法获取的;
反过来说,我是不是可以在客户端创建Socket的时候,能够知道服务端接受连接时的源地址;
另外我记得IP协议中有个属性可以设置是否记录转发路由,这个不知道在使用正常sock(不想使用raw socket或者是其他封装的socket)的情况下,是否能够使用?
外网的服务器是看不到你的内网地址的
你说的内核是那里的内核??
我服务端使用的是Linux服务器,这里说的内核就是指Linux-kernel