首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setsockopt() SOL_IP API级别和IPT_SO_SET_REPLACE开关

setsockopt() SOL_IP API级别和IPT_SO_SET_REPLACE开关
EN

Stack Overflow用户
提问于 2016-07-01 17:40:15
回答 2查看 4K关注 0票数 3

作为setsockopt函数的API级别,SOL_IP到底是什么意思?IPT_SO_SET_REPLACE开关到底做了什么?

我试着在谷歌上搜索这两个网站,但什么也没找到。

请帮助我理解它们(如果你能用例子来扩展和解释,我会非常感激)

EN

回答 2

Stack Overflow用户

发布于 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表才能使用这个套接字选项。

票数 4
EN

Stack Overflow用户

发布于 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是如何使用的:

代码语言:javascript
复制
ret = setsockopt(handle->sockfd, TC_IPPROTO, SO_SET_REPLACE, repl,
                 sizeof(*repl) + repl->size);
if (ret < 0)
        goto out_free_newcounters;

其本质上是通过创建和编译新的iptable来替换新的链式规则。

更多信息:

https://en.wikipedia.org/wiki/Iptables

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38142075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档