iptables 正在将以 047 开头的 IP 地址更改为 39。!

iptables 正在将以 047 开头的 IP 地址更改为 39。!

我一直试图禁止 iptables 中以 047 开头的 IP 地址,但它会将其更改为 039。

iptables -v -w -I INPUT 1 -s 047.75.162.122 -j DROP

但 IP 地址 39.75.162.122 将被禁止!

您认为为什么会发生这种情况?

答案1

事情是这样的:

$ printf "%d\n" 047
39

047八进制就是39十进制。

您只需要删除前导0

猜测,这种情况发生是因为 iptables 中的某些东西将 IPv4 地址拆分为 4 个十进制数字,以便它可以将 IP 字符串表示转换为长整型。但这只是猜测。

答案2

inet_aton还接受其他几种不太常见的形式(手册实际上甚至描述了它们):

octal:
020.0.1.22     ->  16.0.1.22
hexadecimal: 
0x10.0.1.22    ->  16.0.1.22
combination:
020.0.1.0x16   ->  16.0.1.22
bottom two bytes together (old Class B)
16.0.278       ->  16.0.1.22
bottom three bytes together (old Class A)
16.278         ->  16.0.1.22
all in one, hex
0x10000116     ->  16.0.1.22
all in one, decimal (completely unreadable)
268435734      ->  16.0.1.22
this should be simple
0020.0426      ->  ...

它们很可能也适用于网络浏览器。

在八进制数前面加上零,在十六进制数前面加上前缀,这种做法0x至少和 C 语言一样古老。

相关内容