ServletRequest.getRemoteAddr을 사용하여 사용자의 IP 주소를 기반으로 인증하는 Java EE 응용 프로그램에서 변경 작업 중입니다 . 우리는 데이터베이스에 IP 주소 범위 (FROM_IP 및 TO_IP)를 저장하며 시스템은 사용자의 IP 주소가 범위 내에있는 경우에만 인증합니다.
이제 테스터는 FROM_IP 및 TO_IP 값에서 숫자 0을 허용해서는 안된다고 지적했습니다. 이 응용 프로그램은 인터넷 연결 응용 프로그램이므로 공용 IP 주소 만 얻습니다.
테스터가 해당 유효성 검사를 제안하는 데 옳습니까? 167.23.0.1-167.23.255.255와 같은 범위 값에서 0을 가질 수없는 이유는 무엇입니까?
답변
아니요, 완전히 잘못되었습니다.
실제로 이것은 유효한 IP 주소입니다. 192.168.24.0
있는 그대로 167.23.0.1
.
점으로 구분 된 IP 주소를 분리하는 것은 순전히 사람이 편리하게 표시 할 수 있습니다. 192.168.1.42
보다 기억하기가 훨씬 쉽습니다 3232235818
.
컴퓨터에 중요한 것은 분리 (넷 마스크)입니다. 주소의 호스트 섹션이 완전히 0 또는 1로 설정된 호스트 주소를 갖는 것은 유효하지 않습니다.
따라서 넷 마스크가 호스트 부분에 일부 비트가 설정되는 한 192.168.24.0입니다. 다음 계산을 참조하십시오.
michael@challenger:~$ ipcalc 192.168.24.0/16
Address: 192.168.24.0 11000000.10101000. 00011000.00000000
Netmask: 255.255.0.0 = 16 11111111.11111111. 00000000.00000000
Wildcard: 0.0.255.255 00000000.00000000. 11111111.11111111
=>
Network: 192.168.0.0/16 11000000.10101000. 00000000.00000000
HostMin: 192.168.0.1 11000000.10101000. 00000000.00000001
HostMax: 192.168.255.254 11000000.10101000. 11111111.11111110
Broadcast: 192.168.255.255 11000000.10101000. 11111111.11111111
Hosts/Net: 65534 Class C, Private Internet
이 경우 어드레스 부분 (오른쪽)에는 2 비트가 설정됩니다. 이것은 192.168.0.0/16 서브넷에서 유효한 호스트 주소입니다.
michael@challenger:~$ ipcalc 192.168.24.255/16
Address: 192.168.24.255 11000000.10101000. 00011000.11111111
Netmask: 255.255.0.0 = 16 11111111.11111111. 00000000.00000000
Wildcard: 0.0.255.255 00000000.00000000. 11111111.11111111
=>
Network: 192.168.0.0/16 11000000.10101000. 00000000.00000000
HostMin: 192.168.0.1 11000000.10101000. 00000000.00000001
HostMax: 192.168.255.254 11000000.10101000. 11111111.11111110
Broadcast: 192.168.255.255 11000000.10101000. 11111111.11111111
Hosts/Net: 65534 Class C, Private Internet
이 경우, 어드레스 부분은 10 비트 세트 및 6 비트 세트 해제되어있다. 동일한 서브넷에있는 다른 유효한 호스트 주소입니다.
michael@challenger:~$ ipcalc 192.168.24.0/24
Address: 192.168.24.0 11000000.10101000.00011000. 00000000
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
Wildcard: 0.0.0.255 00000000.00000000.00000000. 11111111
=>
Network: 192.168.24.0/24 11000000.10101000.00011000. 00000000
HostMin: 192.168.24.1 11000000.10101000.00011000. 00000001
HostMax: 192.168.24.254 11000000.10101000.00011000. 11111110
Broadcast: 192.168.24.255 11000000.10101000.00011000. 11111111
Hosts/Net: 254 Class C, Private Internet
이 경우, 어드레스 부분은 제로 비트 세트를 갖는다. 192.168.24.0/24 네트워크에서 유효한 호스트 주소가 아닙니다.
답변
내가 오해하지 않는 한, 테스터는 잘못 죽었습니다. 유효한 IP 주소는 확실히 0을 가질 수 있습니다.
답변
일반적으로 : 아니요, 주소에 0이 있는지 여부는 중요하지 않습니다.
그러나 테스터의 말에는 진실이 있습니다. 경우에 따라 이전 또는 중단 된 네트워크 장비는 마지막 octest에서 0을 가진 주소에서 올바르게 작동하지 않습니다. 이는 이전 클래스 풀 라우팅 규칙 때문입니다. Classfull 라우팅에서는 주소의 첫 옥텟에서 넷 마스크를 알 수 있습니다. 장비가 여전히 클래스 전체 라우팅 규칙을 따르는 경우 200.100.1.0/16과 같은 주소를 잘못 처리 할 수 있습니다.
답변
한 범위에서 510 개의 IP 주소가 필요하고 네트워크 주소가 192.1.1.0이고 호스트 IP 중 하나가 .0 IP 주소 인 / 23 서브넷이 있고 .0 주소 인 경우 테스터가 잘못되었다고 가정 해 봅시다. 호스트 주소입니다. / 24 네트워크를 가지고 있다면 그것이 틀렸다고 말하는 것이 옳을 것입니다.
답변
매우 간단한 답변 제공 : IP 주소의 하나 이상의 0은 네트워크 또는 브로드 캐스트 주소가 아닌 한 호스트 주소에 완벽하게 유효합니다.
네트워크 및 브로드 캐스트 주소는 유효한 IP 주소이며 호스트가 사용할 수 없습니다.