用raw socket实现ping(ICMP)中如何 设置TOS(type of service) 。。。

ljp940531 2005-08-01 08:01:26
如下传参数。。。


TOSICMP = 0x2;
result = setsockopt(pingSessions[iIndex].pingSockFd, IPPROTO_IP, IP_TOS, (char*)&TOSICMP, sizeof(TOSICMP));
按上面设置返回正确,但抓包发现 设置的TOSICMP值没起作用。


TOSICMP = 0x3;
result = setsockopt(pingSessions[iIndex].pingSockFd, IPPROTO_ICMP, IP_TOS, (char*)&TOSICMP, sizeof(TOSICMP));
result = setsockopt(pingSessions[iIndex].pingSockFd, IPPROTO_RAW, IP_TOS, (char*)&TOSICMP, sizeof(TOSICMP));
按上面这两种设置返回错误。

...全文
517 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zcy_beijing 2005-08-19
  • 打赏
  • 举报
回复
to ljp940531(ljp) :
windows ping的TOS我早试过确实不行,不过可能是因为现在windows系统加入的QoS支持导致它不能直接设置了。
ljp940531 2005-08-16
  • 打赏
  • 举报
回复
to zcy_beijing(行云流水)
哦,其实我是在vXworks下试的,vXworks UDP的socket行,而icmp的raw socket就不行

所以我就到windows下试了一下icmp的 raw socket也不行, 至于windows的udp的我没试过

可能存在协议栈支持不支持的问题,奇怪是windows应该支持啊
windows自带ping 也有TOS 设置,可惜设置后ping 包出去 抓包发现TOS 字段还是0
不想windows还有这种bug?还是骗人的?
你可以试一试windows ping 功能
zcy_beijing 2005-08-16
  • 打赏
  • 举报
回复
to ljp940531(ljp) :
在我这儿UDP也有问题,很奇怪,后来查找MS的帮助说现在已经不支持直接设置TOS域,要用GQOS API来设置,可是也没有具体例子。在MS的网站山查找了半天,给的例子好像不是我想要的。ICMP包的IP头都是我自己构造的系统都给我改掉了。
ljp940531 2005-08-15
  • 打赏
  • 举报
回复
to zcy_beijing(行云流水)
udp 好象没有问题,就是raw socket 好象有问题
zcy_beijing 2005-08-12
  • 打赏
  • 举报
回复
我也遇到同样问题,不知道什么原因,我用的socketRaw和普通socket都试过不行,UDP的我也设置过同样抓到的包TOS没有修改,不知道你解决没有,实在不行只能自己构造包头了。
zcy_beijing 2005-08-12
  • 打赏
  • 举报
回复
我今天试了一下,自己构造的IP头,发现只要设置了TOS域不为0,系统自动把TOS域置为0,并且重新计算了IP头校验和(通过sniffer截包发现),不知道有什么解决办法?参考下文:http://www.xfocus.net/articles/200202/343.html
ljp940531 2005-08-02
  • 打赏
  • 举报
回复
自己 up 一下。。。。。
ljp940531 2005-08-01
  • 打赏
  • 举报
回复
to windcsn(向所有的朋友学习!)

我觉得只修改tos字段,不需要自己构造 ip头,应该直接设置socket(原始)就可以了啊
icmp 头我自己构造...
ljp940531 2005-08-01
  • 打赏
  • 举报
回复
谢谢!
但是抓包发现IP层的TOS没有起作用还是 0;
如果是udp包就tos值就改过来了。。。
windcsn 2005-08-01
  • 打赏
  • 举报
回复
兄弟,当错我是自己写的IP头和ICMP头
SJcinux 2005-08-01
  • 打赏
  • 举报
回复
应该是第一种写法:
TOSICMP = 0x2;
result = setsockopt(pingSessions[iIndex].pingSockFd, IPPROTO_IP, IP_TOS, (char*)&TOSICMP, sizeof(TOSICMP));

没有用过该功能

18,356

社区成员

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

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