iptables đang thay đổi địa chỉ IP bắt đầu bằng 047. thành 39.!


8

Tôi đã cố gắng cấm một địa chỉ IP trong iptables bắt đầu bằng 047, nhưng nó sẽ thay đổi thành 039.

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

Nhưng địa chỉ IP sẽ bị cấm là 39,75.162.122!

Tại sao bạn nghĩ rằng điều này đang xảy ra?

Câu trả lời:


24

Đây là những gì đang xảy ra:

$ printf "%d\n" 047
39

047trong bát phân là 39số thập phân.

Bạn chỉ cần thả hàng đầu 0.

Theo phỏng đoán, điều này xảy ra bởi vì một cái gì đó trong iptables đang chia địa chỉ IPv4 thành 4 số thập phân để nó có thể chuyển đổi biểu diễn chuỗi IP thành dài. Nhưng đó là phỏng đoán.


5
Hành vi này cuối cùng xuất phát từ stdlib cơ bản strtol()chức năng: " Một hằng số bát phân bao gồm các tiền tố 0tùy chọn tiếp theo là một chuỗi các chữ số 0để 7chỉ ".
Chấn thương kỹ thuật số

1
@ DigitalTrauma + hoặc chỉ sử dụng inet_addr aka inet_atonyêu cầu hiệu ứng củastrtol(,,0)
dave_thndry_085

Đó là tuân thủ POSIX: "Tất cả các số được cung cấp dưới dạng các phần trong ký hiệu thập phân rải rác của IPv4 có thể là thập phân, bát phân hoặc thập lục phân, như được quy định trong tiêu chuẩn ISO C (nghĩa là 0x hoặc 0X hàng đầu ngụ ý thập lục phân; ngụ ý bát phân; nếu không, số được hiểu là thập phân). "
hobbs 11/03/2017

5

inet_atoncũng chấp nhận một vài hình thức ít phổ biến khác ( hướng dẫn thực sự thậm chí mô tả chúng):

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

Họ cũng có khả năng làm việc trên các trình duyệt web.

Tiền tố các số bát phân có số 0 và số thập lục phân với 0xít nhất là bằng ngôn ngữ C.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.