[ip] IPv6 주소의 텍스트 표현의 최대 길이는?

$_SERVER["REMOTE_ADDR"]PHP에서 반환 한 데이터를 DB 필드, 매우 간단한 작업 에 저장하고 싶습니다 . 문제는 웹 서버가 제공하는 IPv6 주소 의 텍스트 표현 의 최대 길이에 대한 적절한 정보를 찾을 수 없다는 것 $_SERVER["REMOTE_ADDR"]입니다.

텍스트 표현을 주소가 일반적으로 인코딩되는 128 비트로 변환하는 데 관심이 없으며에서 반환 한 IPv6 주소를 저장하는 데 필요한 최대 문자 수를 알고 싶습니다 $_SERVER["REMOTE_ADDR"].



답변

45 자 .

당신은 주소가 될 것으로 예상 할 수 있습니다

0000:0000:0000:0000:0000:0000:0000:0000

8 * 4 + 7 = 39

4 자리로 구성된 8 개의 그룹과 :그 사이 에 7 이 있습니다.

그러나 IPv4로 매핑 된 IPv6 주소 가있는 경우 마지막 두 그룹은 기본적으로 10으로 구분할 수 있습니다 ( .예 :). [::ffff:192.168.100.228]. 완전히 작성 :

0000:0000:0000:0000:0000:ffff:192.168.100.228

(6 * 4 + 5) + 1 + (4 * 3 + 3) = 29 + 1 + 15 = 45

이것은 입력 / 디스플레이 규칙입니다. 여전히 128 비트 주소이며 저장을 위해 원시 콜론으로 분리 된 형식, 즉 [0000:0000:0000:0000:0000:ffff:c0a8:64e4]위의 주소 로 표준화하는 것이 가장 좋습니다 .


답변

Linux에서는 constant를 참조하십시오 INET6_ADDRSTRLEN(include <arpa/inet.h>참조 man inet_ntop). 내 시스템 (헤더 “in.h”)에서 :

#define INET6_ADDRSTRLEN 46

마지막 문자는 내가 믿는대로 NULL을 종료하기위한 것이므로 다른 대답으로 최대 길이는 45입니다.


답변

내 자신의 질문에 대답 :

IPv6 주소는 일반적으로 4 개의 16 진수로 구성된 8 개의 그룹으로 작성되며 각 그룹은 콜론 (:)으로 구분됩니다.

최대 39 자입니다.


답변

이 링크의 @Deepak 답변이 정답에 더 가깝다고 생각합니다. 클라이언트 IP 주소의 최대 길이 . 정확한 크기는 45가 아니라 39입니다. 때로는 필드 크기를 수정하려고 시도하지만 충분한 스토리지 크기를 준비하면 더 나은 것 같습니다.


답변

표시된대로 표준 ipv6 주소는 최대 45 자이지만 ipv6 주소에는 종료 길이 다음에 “범위”또는 “영역”문자열이 포함될 수 있으며 길이는 고정되어 있지 않지만 일반적으로 작은 양의 정수 또는 네트워크 인터페이스입니다 이름은 실제로 45 자보다 클 수 있습니다. 네트워크 인터페이스 이름은 일반적으로 “eth0”, “eth1”, “wlan0″이므로 한계를 50으로 선택하면 충분합니다.


답변

HTTP_X_FORWARDED_FOR단일 IP 주소를 포함하는 것처럼 보이는 특정 헤더를 조심하십시오 . 실제로 여러 주소 (내가 가정하는 프록시 체인)가 포함될 수 있습니다.

쉼표로 구분 되어 있으며 총 45 자보다 훨씬 길 수 있으므로 DB에 저장하기 전에 확인하십시오.


답변