Android getprotobyname错误iptables

Android getprotobyname错误iptables,android,Android,我在根设备上有支持iptables的android 我似乎犯了这个错误,有人知道为什么吗 iptables -A INPUT -p tcp -i eth0 --dport 8000 -m state --state NEW -j ACCEPT 您可以键入6而不是tcp iptables-A INPUT-p6(代替iptables-A INPUT-pTCP) 在某些设备上,这可能只是一个警告,但规则是可以的。 使用iptables-L INPUT-nv检查规则是否显示 然后试试看。Androi

我在根设备上有支持iptables的android

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

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


您可以键入6而不是tcp

iptables-A INPUT-p6(代替iptables-A INPUT-pTCP)


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

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

幸运的是,该功能对于使用iptables不是必需的
getprotobyname()
只是将tcp等协议名称转换为一个数字(tcp==6)。您可以在此处找到这些数字:

使用协议编号来消除错误消息:


iptables-A输入-p6-i eth0--dport8000-m状态--state NEW-j接受

这是一个已知的问题,因为在询问此问题之前,您会发现是否对iptables进行了web搜索以及错误消息。如果这实际上是关键的,而不是相切的,则需要使用不受支持的函数修补iptables,或者以避免需要的方式使用它。
iptables
似乎在触发此错误时仍会运行该命令,但我的猜测是,它忽略了
-ptcp
部分,只是为所有协议设置了规则。如果必须在规则中包含协议,请使用协议编号。尝试此操作后,现在我得到“修复我!实现getprotobynumber()bionic/libc/bionic/stubs.c:384”@Dakkaron也许您使用的是一个旧Android版本,它甚至没有实现
getprotobynumber()
?在这种情况下,似乎您唯一的选择是省略
-p
,并为所有协议设置规则。在Android 4.1.2上,我也得到了
getprotobynumber
错误
FIX ME! implement getprotobyname() bionic/libc/bionic/stubs.c:378