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에 저장하기 전에 확인하십시오.
'Programming' 카테고리의 다른 글
Node.js에서 파일을 자동으로 다시로드하는 방법? (0) | 2020.02.21 |
---|---|
Git 저장소를 원격으로 추가하려고 할 때 "치명적 : git 저장소가 아님"수신 (0) | 2020.02.21 |
Android에서 프로그래밍 방식으로 앱 언어 변경 (0) | 2020.02.20 |
SQL Server에서 MONEY 또는 DECIMAL (x, y) 데이터 유형을 선택해야합니까? (0) | 2020.02.20 |
.NET의 문자열에서 분음 부호 (악센트)를 어떻게 제거합니까? (0) | 2020.02.20 |