回答:
これが起こっていることです:
$ printf "%d\n" 047
39
0478進数は3910進数です。
あなただけのリーディングをドロップする必要があり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だけ」。