SO_MARK合法取值范围、类型定义及抓包查看方法咨询
SO_MARK 取值说明
- 类型正确性:Linux 内核定义的
SO_MARK本身是 32 位无符号整数,所以使用unsigned int是符合内核规范的写法,部分项目用int属于不规范的历史遗留写法,存在符号位溢出的风险。 - 合法取值范围:内核层面没有预留值,合法范围为 0 ~ 4294967295(即 32 位无符号整数的全取值区间),你给 ping 工具做输入校验时,只要限定输入值落在这个区间即可。
- 额外权限规则:值为 0 是默认标记,所有用户都可设置;非 0 值需要进程持有
CAP_NET_ADMIN权限才能设置成功,这个属于运行时权限校验,不需要放到输入值校验逻辑里。
抓包工具查看 SO_MARK 的方法
SO_MARK 是 Linux 内核网络栈的内部元数据,不会被写入数据包的实际报文头,所以跨节点抓包无法看到该值。如果是在标记生效的 Linux 本机抓包,可以通过工具捕获到该元数据:
- tcpdump 抓包时添加
-vverbose 参数,输出中会直接展示mark 0x[十六进制标记值]字段 - wireshark 打开本地抓包文件时,在「Linux cooked capture」协议层可以找到对应的
Mark字段查看具体值
内容的提问来源于stack exchange,提问作者pevik
相关产品推荐
相关产品推荐

