【问题标题】:getprotobyname error iptablesgetprotobyname 错误 iptables
【发布时间】:2012-04-26 10:35:21
【问题描述】:

我在根设备上安装了支持 iptables 的 android。

我似乎收到了这个错误,有人知道为什么吗?

iptables -A INPUT -p tcp -i eth0 --dport 8000 -m state --state NEW -j ACCEPT

FIX ME! implement getprotobyname() bionic/libc/bionic/stubs.c:378

【问题讨论】:

  • 这是一个已知问题,因为您会在此处询问之前了解您是否在 iptables 上进行了网络搜索以及错误消息。如果这实际上是关键而不是切线,则需要使用不受支持的功能修补 iptables 或以避免需要它的方式使用它。

标签: android


【解决方案1】:

Android 使用 Bionic libc,这是一个非常小的 libc,缺少很多东西。该错误消息表示getprotobyname() 未在 Bionic libc 中实现。 iptables 似乎在触发此错误时无论如何都会运行该命令,但我的猜测是它忽略了 -p tcp 部分并只是为所有协议设置规则。

幸运的是,该功能对于使用 iptables 并不是必不可少的。 getprotobyname() 只是将协议名称(如 tcp)转换为数字(tcp == 6)。你可以在这里找到这些号码:http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml

改用协议号-p 6来消除错误信息:

iptables -A INPUT -p 6 -i eth0 --dport 8000 -m state --state NEW -j ACCEPT

【讨论】:

  • 试过这个,现在我得到“修复我!实现 getprotobynumber() bionic/libc/bionic/stubs.c:384”
  • @Dakkaron 也许您正在使用甚至没有实现getprotobynumber() 的旧Android 版本?在这种情况下,您唯一的选择似乎是省略 -p 并为所有协议设置规则。
  • 我在 Android 4.1.2 上也遇到了getprotobynumber 错误
【解决方案2】:

您可以输入 6 而不是 tcp。

iptables -A INPUT -p 6(代替 iptables -A INPUT -p tcp )

http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml

【讨论】:

    【解决方案3】:

    在某些设备上,这可能只是一个警告,但规则是可以的。 使用 iptables -L INPUT -nv 检查规则是否出现 然后试试看。

    【讨论】:

    • iptables 似乎在触发此错误时无论如何都会运行该命令,但我的猜测是它忽略了 -p tcp 部分并只是为所有协议设置规则。如果必须在规则中包含协议,请使用协议编号。
    猜你喜欢
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    相关资源
    最近更新 更多