iptables는 047.에서 39로 시작하는 IP 주소를 변경하고 있습니다!


8

047로 시작하는 iptables에서 IP 주소를 금지하려고 시도했지만 039로 변경합니다.

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

그러나 IP 주소는 39.75.162.122로 금지됩니다!

왜 이런 일이 일어나고 있다고 생각합니까?

답변:


24

이것은 일어나고 있습니다 :

$ printf "%d\n" 047
39

0478 진수는 3910 진수입니다.

당신은 단지 선두를 삭제해야합니다 0.

iptables의 어떤 것이 IPv4 주소를 4 개의 십진수로 나누기 때문에 IP 문자열 표현을 long으로 변환 할 수 있기 때문입니다. 그러나 그것은 추측입니다.


5
이 문제는 궁극적으로 기본 다음 stdlib에서 제공 strtol()기능 : " 8 진수 상수는 접두사로 구성되어 0선택적으로 연속 된 숫자 다음 07 ."
디지털 외상

1
@ DigitalTrauma + 또는 그냥 사용 inet_addr aka inet_aton하는 효과strtol(,,0)
dave_thompson_085

POSIX 준수 : "IPv4 점으로 구분 된 십진 표기법의 일부로 제공되는 모든 숫자는 ISO C 표준에 지정된대로 10 진수, 8 진수 또는 16 진수 일 수 있습니다 (즉, 선행 0x 또는 0X는 16 진수를 의미하고 그렇지 않으면 선행 '0') 8 진수를 의미하고, 그렇지 않으면 숫자는 10 진수로 해석됩니다. "
hobbs

5

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 진수는 앞에 0xC 언어만큼 오래된 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.