047로 시작하는 iptables에서 IP 주소를 금지하려고 시도했지만 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
8 진수는 39
10 진수입니다.
당신은 단지 선두를 삭제해야합니다 0
.
iptables의 어떤 것이 IPv4 주소를 4 개의 십진수로 나누기 때문에 IP 문자열 표현을 long으로 변환 할 수 있기 때문입니다. 그러나 그것은 추측입니다.
답변
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 진수는 앞에 0x
C 언어만큼 오래된 것입니다.