回答:
これが起こっていることです:
$ printf "%d\n" 047
39
047
8進数は39
10進数です。
あなただけのリーディングをドロップする必要があり0
ます。
恐らく、これはiptablesの何かがIPv4アドレスを4つの10進数に分割して、IP文字列表現をlongに変換できるために発生しています。しかし、それは推測です。
inet_addr aka inet_aton
の効果を必要とするだけを使用strtol(,,0)
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 -> ...
彼らはウェブブラウザでも動作するようです。
8進数の接頭辞として0を、16進数の接頭辞0x
として少なくともC言語と同じです。
strtol()
機能:「8進定数は接頭辞で構成され0
、必要に応じて数字の列が続く0
に7
だけ」。