문제

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

텍스트 표현을 128 비트로 변환하는 데 관심이 없습니다. 주소가 일반적으로 인코딩 된 128 비트로 변환하는 데 관심이 없습니다. $_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 (포함 <arpa/inet.h>, 보다 man inet_ntop). 내 시스템 (헤더 "in.h")에서 :

#define INET6_ADDRSTRLEN 46

마지막 캐릭터는 내가 믿는 것처럼 null을 종료하기위한 것이므로 다른 답변과 같이 최대 길이는 45입니다.

내 자신의 질문에 대답했습니다.

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

그래서 그것은 최대 39 자입니다.

이 링크의 @deepak 답변은 정답에 더 가깝다고 생각합니다. 클라이언트 IP 주소의 최대 길이. 따라서 올바른 크기는 45가 아닙니다.

표준 IPv6 주소는 최대 45 숯이지만 IPv6 주소에는 엔딩 % 뒤에 "스코프"또는 "영역"문자열이 포함될 수도 있지만 길이는 고정되지 않았지만 일반적으로 작은 양의 정수 또는 네트워크 인터페이스입니다. 이름, 실제로는 45 자 미만이 될 수 있습니다. 네트워크 인터페이스 이름은 일반적으로 "eth0", "eth1", "wlan0"이므로 한계로 50을 선택하면 충분할 것입니다.

다음과 같은 특정 헤더를 조심하십시오 HTTP_X_FORWARDED_FOR 단일 IP 주소가 포함 된 것으로 보입니다. 실제로 여러 주소 (내가 가정하는 프록시 체인)를 포함 할 수 있습니다.

그들은 보일 것입니다 쉼표가 구분되었습니다 - 총 45 자 미만이 될 수 있습니다. 따라서 DB에 저장하기 전에 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top