iptables mengubah alamat IP yang dimulai dengan 047. menjadi 39.!


8

Saya telah mencoba untuk melarang alamat IP di iptables yang dimulai dengan 047, tetapi itu akan mengubahnya menjadi 039.

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

Tetapi alamat IP akan dilarang sebagai 39.75.162.122!

Menurut Anda mengapa ini terjadi?

Jawaban:


24

Inilah yang terjadi:

$ printf "%d\n" 047
39

047di oktal adalah 39dalam desimal.

Anda hanya perlu menjatuhkan yang terdepan 0.

Di duga, ini terjadi karena sesuatu dalam iptables membagi alamat IPv4 menjadi 4 angka desimal sehingga dapat mengubah representasi string IP menjadi panjang. Tapi itu dugaan.


5
Perilaku ini akhirnya berasal dari stdlib mendasari strtol()fungsi: " Sebuah konstan oktal terdiri dari awalan 0opsional diikuti dengan urutan angka 0untuk 7hanya ".
Digital Trauma

1
@ DigitalTrauma + atau hanya menggunakan inet_addr aka inet_atonyang membutuhkan efekstrtol(,,0)
dave_thompson_085

Ini sesuai dengan POSIX: "Semua angka yang disediakan sebagai bagian dalam notasi desimal bertitik IPv4 dapat berupa desimal, oktal, atau heksadesimal, seperti yang ditentukan dalam standar ISO C (yaitu, 0x atau 0X terkemuka menyiratkan heksadesimal; jika tidak, terkemuka '0' menyiratkan oktal; jika tidak, jumlahnya ditafsirkan sebagai desimal). "
hobbs

5

inet_atonjuga menerima beberapa formulir lain yang tidak biasa ( manual ini bahkan menggambarkannya):

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      ->  ...

Mereka juga cenderung bekerja di browser web.

Awalan angka oktal dengan nol, dan angka heksadesimal dengan 0xsetidaknya setua bahasa C.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.