如何解决内网IP端口映射,从而取不到IP地址的情况

牛知道 2005-03-09 04:50:45
内网有一台MAIL服务器(192.168.0.111),这台服务器不直接对外网,而是通过另外一个电脑(192.168.0.1)连接公网,并且接收数据,如果有登陆25端口的数据就直接转发到MAIL服务器上,但是有这样一个问题,因为是从作为网关的那台服务器发送过来的,所以我的MAIL服务器在 判断连接IP的时候总是那台网关服务器的IP,请问如何解决这个问题?
我现在在192.168.0.111(mail服务器上)使用了如下的编程
if((new_fd = accept(sockfd,(struct sockaddr *) &their_addr,&sin_size))==-1)
{
perror("accept");
close(sockfd);
exit(0);
}
is_connected[new_fd] =1;
printf("\n\n-------------------------------------------\n");
printf("New Connect From %s\n",inet_ntoa(their_addr.sin_addr));
printf("-------------------------------------------\n");

则现在这里现实的IP一直是 192.168.0.1,而我原本希望的是,从外网的什么IP连接进来,就现实什么IP
...全文
446 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
牛知道 2005-03-10
  • 打赏
  • 举报
回复
问题解决了,是利用WINDOWS2003下面系统层的NAT来做的,而不能用软件层的做。
牛知道 2005-03-09
  • 打赏
  • 举报
回复
继续等待中
ym_lyf 2005-03-09
  • 打赏
  • 举报
回复
同意楼上的观点,不过不需要用抓包软件,自己写可以,我在freebsd下使用BPF可以抓包
galanz 2005-03-09
  • 打赏
  • 举报
回复
用socket解析服务器的包只能得到服务器的地址,socket只不过是按固定的格式对发来的数据包读取信息,如果你要得到外网的ip,这个解析的动作就要由自己来完成,建议:通过抓报软件(如:sniffer)分析来自服务器转发的数据报的结构,然后读取需要的信息。
牛知道 2005-03-09
  • 打赏
  • 举报
回复
我是linux下面的socket编程,往高手指点
ym_lyf 2005-03-09
  • 打赏
  • 举报
回复
你需要把接收到的包解析,Ip包头有发包的源地址,你通过这个地址判断应该可以了,你用accept函数得到的只是服务器的IP,我在Freebsd下编过类似的程序,windows下应该也可以,你试试吧!
我也不是很懂,希望高手指点。

69,379

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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