iptables sta cambiando gli indirizzi IP che iniziano con 047. a 39.!


8

Ho provato a vietare un indirizzo IP in iptables che inizia con 047, ma lo cambierebbe in 039.

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

Ma l'indirizzo IP sarebbe vietato come 39.75.162.122!

Perché pensi che stia succedendo?

Risposte:


24

Questo è ciò che sta succedendo:

$ printf "%d\n" 047
39

047in ottale è 39in decimale.

Devi solo abbandonare il comando 0.

Probabilmente ciò accade perché qualcosa in iptables sta suddividendo gli indirizzi IPv4 in 4 numeri decimali in modo da poter convertire la rappresentazione della stringa IP in un lungo. Ma questa è congettura.


5
Questo comportamento viene in ultima analisi dal stdlib sottostante strtol()funzione: " An costante ottale costituito dal prefisso 0eventualmente seguita da una sequenza di cifre 0a 7solo ".
Trauma digitale

1
@ DigitalTrauma + o semplicemente l'utilizzo inet_addr aka inet_atonche richiede l'effetto distrtol(,,0)
dave_thompson_085

È conforme POSIX: "Tutti i numeri forniti come parti nella notazione decimale puntata IPv4 possono essere decimali, ottali o esadecimali, come specificato nello standard ISO C (ovvero, uno 0x o 0X iniziale implica esadecimale; altrimenti, uno '0' iniziale implica ottale; in caso contrario, il numero viene interpretato come decimale). "
Hobbs

5

inet_atonaccetta anche un paio di altri moduli meno comuni ( il manuale li descrive addirittura):

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

È probabile che funzionino anche con i browser web.

Il prefisso dei numeri ottali con uno zero e i numeri esadecimali con 0xsono vecchi almeno quanto il linguaggio C.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.