在设计NAT时,对于ICMP报文怎么处理啊?

门吹西风 2001-08-26 09:32:39
所有的ICMP包首部的前四个字节是相同的,但是后面的内容就定了,有的长,有的短,根据type字段和code字段的不同,有好几十种可能,当然有些包是不需要对方回答的,比如说差错报文,但是有些包是需要对方回答的,比如说回显请求:ping,这些我该怎么处理呢?还有,ICMP包中根本没有port,怎么办呢?谢谢先!我真的急用啊!
...全文
468 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lurenfu 2002-01-05
  • 打赏
  • 举报
回复
linux源代码里有NAT:在linux/net/ipv4/netfilter/目录下
lurenfu 2002-01-05
  • 打赏
  • 举报
回复
查NAT的RFC瞧瞧,tiro做过NAT没有?
hongyucn 2002-01-04
  • 打赏
  • 举报
回复
其实我建议楼上的兄弟们去看看《TCP/IP详解》,上面讲的实在是太清楚了,建议你们多看看TCP/IP的原代码!
zcq111 2002-01-04
  • 打赏
  • 举报
回复
uppp
tuba_cn 2002-01-04
  • 打赏
  • 举报
回复
关注!!!
chenm001 2002-01-04
  • 打赏
  • 举报
回复
sendto只能发送本机为原地址的包,要想修改发送者的地址,需要使用RAW套接字!
leon_32163 2002-01-04
  • 打赏
  • 举报
回复
我也在作NAT
这里有没有高手回答这个问题呀。

另外我通过端口绑定ip地址,这种实现方式是否可行?
killers 2001-12-16
  • 打赏
  • 举报
回复
anyiflyer
这个问题解决了吗?希望告知
bares 2001-09-05
  • 打赏
  • 举报
回复
你好,我也想了解一些相关知识,希望老兄能帮我一把,在下先谢过了。、

当我从另外一代机器上收到一个udp包,我想转发出去。
我把IP包的原地址改为本机地址,重新计算了checksum,可是发送时报错,sendto返回-1
WSAGetLastError() == 10049无效的地址,怎么办?
转发代码如下:
memset(&remote, 0, sizeof(remote));
remote.sin_family = AF_INET;
remote.sin_port = htons(port);
remote.sin_addr.s_addr = inet_addr(szDest);

pIpHeader->sourceIP = inet_addr("10.100.60.116");
pIpHeader->checksum = 0;
pIpHeader->checksum = checksum((unsigned short *)bufwork, sizeof(IPHEADER));
rs = sendto(sd, bufwork, iLen, 0, (SOCKADDR *)&remote, sizeof(remote));
dwErr = WSAGetLastError() ;
sprintf( szErr , "Error WSAIoctl = %ld " , dwErr ) ;
请问错在那里?

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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