socket设置ttl的问题

sunny906 2014-12-05 12:05:04
在用socket发送ICMP数据包时,如果设置socket的TTL=1或者小于总的路由数时,ReceiveFrom会无期限阻塞,请问如何破
...全文
572 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
kawenmai 2017-07-23
  • 打赏
  • 举报
回复
udp也是可以connect的
sunny906 2014-12-05
  • 打赏
  • 举报
回复
设置timeout,只能让阻塞时间达到超时时间就退出,还是接收不到终结点的报文
sunny906 2014-12-05
  • 打赏
  • 举报
回复
不行的,ICMP是无连接协议
於黾 2014-12-05
  • 打赏
  • 举报
回复
还有,你确定路由器在丢弃数据包的时候会回发"超时报文"? 我印象中路由器没有这个机制 你应该设置超时时间,超过这个时间没有收到任何消息就不再阻塞了
於黾 2014-12-05
  • 打赏
  • 举报
回复
引用 5 楼 sunny906 的回复:
[quote=引用 3 楼 Z65443344 的回复:] ttl设置成小于路由数,是想闹哪样,生存周期过短,数据包还没有到达指定IP的终端就被路由器丢弃了
呵呵,,就是为了在到达目标结点之前就返回超时报文[/quote] 那就直接recieve不行吗,不管是谁把信息发回来,都接收,而不是只接收指定IP发回的报文
sunny906 2014-12-05
  • 打赏
  • 举报
回复
引用 3 楼 Z65443344 的回复:
ttl设置成小于路由数,是想闹哪样,生存周期过短,数据包还没有到达指定IP的终端就被路由器丢弃了
呵呵,,就是为了在到达目标结点之前就返回超时报文
sunny906 2014-12-05
  • 打赏
  • 举报
回复
另外,设置TTL=1,是为了让第一个路由回发一个超时报文
於黾 2014-12-05
  • 打赏
  • 举报
回复
加个timeout 话说,ttl设置成小于路由数,是想闹哪样,生存周期过短,数据包还没有到达指定IP的终端就被路由器丢弃了
sunny906 2014-12-05
  • 打赏
  • 举报
回复
ReceiveFrom是面向无连接的,它存储的是终结点,并不一定是目标结点
  • 打赏
  • 举报
回复
socket的TTL=1或者小于总的路由数时,意外着在数据包到达目的地之前就已被丢弃 ReceiveFrom是接收来自指定源的数据,ReceiveFrom本来就是阻塞直到收到可读的数据为止 你自己设置的错误逻辑
sunny906 2014-12-05
  • 打赏
  • 举报
回复
不是每种协议都要connect,比如udp以及网络层协议
sunny906 2014-12-05
  • 打赏
  • 举报
回复
不是每种协议都要connect,比如udp以及网络层协议
sunny906 2014-12-05
  • 打赏
  • 举报
回复
不是每种协议都要connect,比如udp以及网络层协议
  • 打赏
  • 举报
回复
引用 8 楼 sunny906 的回复:
不行的,ICMP是无连接协议
不管是什么协议,通信是基于socket的,都可以先bind,connect,然后send-receiveFrom,只不过这时候将只会接收连接方的数据 如果你是做这个测试,那得看一下反馈的报文是否送达发送方,中间路由器及发送方的防火墙的设置如何?找个网卡监听工具抓一下
  • 打赏
  • 举报
回复
引用 8 楼 sunny906 的回复:
不行的,ICMP是无连接协议
不管是什么协议,通信是基于socket的,都可以先bind,connect,然后send-receiveFrom,只不过这时候将只会接收连接方的数据 如果你是做这个测试,那得考虑一下,反馈的报文是否送达发送方,比如中间路由器及发送方的防火墙的设置,你可以找一下网卡数据包监听工具抓一下
於黾 2014-12-05
  • 打赏
  • 举报
回复
实在玩不明白icmp的话, 你也可以程序直接调用ping指令 总之你得能够接受任何IP发来的报文,而不是你指定的IP

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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