SOL_IP
是什么意思作为setsockopt
函数的API级别和IPT_SO_SET_REPLACE
开关做什么?
我试图在谷歌search,但我什么也没find。
请帮我理解他们(如果你可以扩展和解释的例子,我真的很感激它)
SOL_IP
是由套接字选项寻址的网络层。 例如,一个普通的TCP套接字包含了TCP层,然后是它下面的IP层,等等。 setsockopt
用于将各种指令传递到特定的层以请求某些服务,功能或操作:基本上,您可能需要配置的任何内容都不会直接与系统调用相匹配。 (手册页中提到的“API级别”基本上是我在这里称为“层”的相同的事情。)
你经常在linux程序(和使用例子)中看到的一些包括:
SOL_PACKET
(配置分组环,添加/删除多播组成员) SOL_IP
(设置/配置各种IP数据包选项,IP层行为,[在这里] netfilter模块选项) SOL_TCP
(TCP_NODELAY,特定于TCP的保持有效参数) SOL_SOCKET
(REUSEADDR,Keepalives) 您可以在setsockopt
解决的层取决于您创建的套接字类型。 在这里,IP层正在被解决。
在这种情况下,传递的选项是IPT_SO_SET_REPLACE
– 它不是“核心”IP选项,而是由IP Tables模块提供的,该模块通过“netfilters”接口将自身链接到网络堆栈中。 我不熟悉IP表的详细信息,但该选项似乎是IP表的一个指令来替换一组规则表条目。 我认为使用它将需要非常深入的IP表知识来使用这个套接字选项。
只要专注于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来取代新的链式规则。
更多信息: