Назад | Перейти на главную страницу

iptables меняет IP-адреса, начинающиеся с 047. на 39.!

Я пытался заблокировать IP-адрес в iptables, который начинается с 047, но это изменило бы его на 039.

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

Но IP-адрес будет забанен как 39.75.162.122!

Как вы думаете, почему это происходит?

Вот что происходит:

$ printf "%d\n" 047
39

047 в восьмеричном виде 39 в десятичной системе счисления.

Вам просто нужно отбросить ведущую 0.

Предположительно, это происходит потому, что что-то в iptables разбивает IPv4-адреса на 4 десятичных числа, чтобы преобразовать строковое представление IP в длинное. Но это предположение.

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.