作为setsockopt函数的API级别,SOL_IP到底是什么意思?IPT_SO_SET_REPLACE开关到底做了什么?
我试着在谷歌上搜索这两个网站,但什么也没找到。
请帮助我理解它们(如果你能用例子来扩展和解释,我会非常感激)
发布于 2016-07-01 23:30:21
SOL_IP是由套接字选项寻址的网络层。例如,一个普通的TCP套接字包含TCP层,然后是它下面的IP层,依此类推。setsockopt用于将杂项指令向下传递到特定的层,以请求某些服务、功能或操作:基本上,您可能需要配置的任何东西都不直接与系统调用匹配。(手册页中提到的"API级别“基本上与我在这里称为”层“的内容相同。)
您经常在linux程序中看到的一些(以及使用的示例)包括:
SOL_PACKET (配置数据包环,添加/丢弃多播组memberships)SOL_IP (设置/配置各种IP数据包选项、IP层行为,如此处的netfilter模块options)SOL_TCP (TCP,TCP特定的保持连接params)SOL_SOCKET (REUSEADDR,keepalives)您可以在setsockopt中寻址的层取决于您创建的套接字的类型。在这里,它是正在寻址的IP层。
在本例中,传递的选项是IPT_SO_SET_REPLACE --它不是“核心”IP选项,而是由IP表模块提供的,该模块(IIUC)通过"netfilters“接口将自身链接到网络堆栈。我不熟悉IP表的详细信息,但该选项似乎是对IP表的指示,用于替换一组规则表条目。我认为使用它需要非常熟悉IP表才能使用这个套接字选项。
发布于 2016-11-23 11:13:45
只关注IPT_SO_SET_REPLACE选项。
它是用一个新的链规则替换iptable (参见-R选项):
https://www.frozentux.net/iptables-tutorial/iptables-tutorial.html
http://ipset.netfilter.org/iptables.man.html
以上是要使用的命令行选项。如果您想查看C程序,只需使用"apt-get source iptables“获取源代码,然后查看libiptc/libiptc.c以了解SO_SET_REPLACE是如何使用的:
ret = setsockopt(handle->sockfd, TC_IPPROTO, SO_SET_REPLACE, repl,
sizeof(*repl) + repl->size);
if (ret < 0)
goto out_free_newcounters;其本质上是通过创建和编译新的iptable来替换新的链式规则。
更多信息:
https://stackoverflow.com/questions/38142075
复制相似问题