用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));
按上面这两种设置返回错误。

...全文
638 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));

没有用过该功能
内容概要:SSD2828QN4是一款MIPI主桥接芯片,用于连接应用处理器与传统并行LCD接口及支持MIPI从属接口的LCD驱动器。该芯片支持最高每通道1Gbps的串行链路速度,最多可配置4个数据通道,显著减少了信号数量。它支持多种接口模式,包括RGB+SPI组合接口,适用于驱动智能或非智能显示面板,并能通过命令模式和视频模式传输数据。芯片内置时钟和复位模块、外部接口、协议控制单元(PCU)、包处理单元(PPU)、错误校正码/循环冗余校验(ECC/CRC)模块、长包和命令缓冲区、D-PHY控制器、模拟收发器以及内部锁相环(PLL),确保了高效的数据传输和系统稳定性。此外,文档详细描述了芯片的引脚分配、寄存器设置、操作模式、电源序列、时序特性等关键参数,为开发者提供了全面的技术指导。 适合人群:具备一定硬件设计基础,从事嵌入式系统开发、显示技术研究的研发人员。 使用场景及目标:①实现应用处理器与MIPI兼容显示屏之间的高速数据传输;②优化显示系统的功耗表现,减少电磁干扰(EMI);③通过灵活配置不同接口模式来适应各种显示设备的需求。 阅读建议:此文档面向具有一定电子工程背景的专业人士,建议读者结合实际项目需求深入理解各章节内容,特别是关于寄存器配置、时序要求等方面的具体说明。对于初次接触此类技术的开发者而言,建议先熟悉基本概念再逐步掌握高级功能的应用方法。

18,356

社区成员

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

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