perl에서 gethostbyname 함수에 잘못된 형식의 IP가 주어지면 어떻게됩니까? 우리 스크립트 중 하나가 틀린 형식의 IP (1.1.1)를 받았을 때 이상하게 행동했습니다. 디버깅 할 때, gethostbyname은 1.1.1에 주어진 값을 반환한다는 것을 발견했습니다. 이것에 대한 생각은 ... ... 제 생각에 gethostbyname은 undef를 리턴해야합니다, 맞습니까?perl gethostbyname 주어진 IP시
답변
IPv4의 시작 부분에서 CIDR 이전에는 주소가 네트워크 부분과 호스트 부분으로 구성된 것으로 간주되었습니다. 파트는 점 분리 10 진수 형식으로 독립적으로 작성 될 수 있으며 완전히 바이트로 분해 할 필요는 없습니다. 따라서 1.1
은 네트워크 1의 호스트 1이며 1.0.0.1
과 같거나 하나의 큰 32 비트 번호 : 16777217로 작성할 수 있습니다. 사람들이 http://16777127/
과 같은 URL을 사용하여 얼마나 영리했는지 보여줄 수있는 시간이있었습니다. 스팸 발송자가 필터를 속일 때 스패머가 그렇게하기 시작했을 때 망가졌습니다.
아무튼, 내가 핑 1.1.1
때, 그것은 1.1.0.1
로갑니다. 나는 1.0.1.1
을 추측했을 것이다. 나는 그것이 어떻게 정확하게 깨 졌는지를 결정하는 것이 무엇인지 모르겠습니다.
이 오래된 양식은 더 이상 지원되지 않거나 이해되지는 않지만 모든 도구와 라이브러리에서 완전히 뿌리를 내리지 못했습니다.
P. 이 답변을 제출하기위한 첫 시도에서 stackoverflow는 다음과 같이 말했습니다.
게시물에 잘못된 도메인 '16777127'에 대한 링크가 포함되어 있습니다. 전체 도메인을 지정하거나 코드 블록에 배치하여 수정하십시오.
"널리 지원되지 않음"이 의미하는 것과 같습니다.
죄송합니다. 내 번호가 일치하지 않았습니다. 16777127은 16777217이어야합니다. 0x01000001입니다. 오 그래 그래도 gethostbyname도 역사적으로 8 진수와 16 진수를 허용한다는 것을 언급하지 않았기 때문에 어떤 파티 푸줏간주도 나타나지 않고 사용하지 않으면 0x01000001도 호스트 이름으로 작동합니다. –
숫자 IPv4 주소는 1, 2, 3 또는 4 숫자 구성 요소로 쓸 수 있습니다. 각 비 최종 구성 요소는 8 비트 (1 옥텟)를 나타내며 최종 비트는 전체 32 비트 주소를 제공하는 데 필요한 많은 비트를 나타냅니다. 따라서 다음은 모두 로컬 루프백 주소를 나타냅니다.
2130706433
127.1
127.0.1
127.0.0.1
각 구성 요소 자체는 10 진수, 16 진수 또는 8 진수로 쓸 수 있습니다. 따라서 모든 또한
0x7f000001
127.0x01
0177.0.1
0x7f.0.0.1
- 1. gethostbyname() 및 valgrind
- 2. gethostbyname xcode issues
- 3. PHP : gethostbyname 버그
- 4. IPv6 주소 대체 gethostbyname
- 5. gethostbyname, 인터넷에 연결되어 있습니까?
- 6. 64 비트 Windows에서 gethostbyname 문제
- 7. Perl : 주어진 목록에없는 IP 주소의 범위를 얻으십시오.
- 8. PHP의 gethostbyname()으로 IP 주소 가져 오기
- 9. gethostbyname 대신 DNS 서버를 선택할 수 있습니까?
- 10. Vim Perl 자동 완성 주어진 모듈 기능 표시
- 11. 거기에있는 요소를 주어진 배열 요소의 색인을 얻는 직접적인 방법은 perl?
- 12. PHP : gethostbyname() 및 checkdnsrr()에 대한 일치하지 않는 결과
- 13. GetHostByName http 링크로 IP 주소를 가져 오는 중 오류가 발생했습니다.
- 14. Perl
- 15. Perl?
- 16. Perl RegEx. @
- 17. Perl 인라인 대체 Perl 스크립트
- 18. Expect perl 모듈을 사용하여 perl
- 19. Perl 배열 조작
- 20. 주어진 URL에서 주어진 경로의 파일을 루아에서 주어진 경로로 다운로드하고 저장합니다.
- 21. Perl 소켓은 Linux에서 호스트 이름을 어떻게 해석합니까?
- 22. Perl 해시 출력 해시
- 23. Win32에서 gVim perl 태그 - Perl :: Tags를 사용해야합니까?
- 24. 벤치마킹 Perl Git 간 Perl 기능
- 25. perl/perl 모듈에서 ".yml"파일을 사용하는 이유
- 26. perl-xs 모듈에 Perl 코드를 어떻게 포함합니까?
- 27. Perl : Perl-Hash의 Mysql-table에서 열을 저장하십시오.
- 28. 주어진 문자열을 Ruby에서 주어진 숫자로 암호화하는 방법
- 29. 주어진 시간 동안 setTimeout하지만 주어진 시간 동안
- 30. 주어진 IMethodMessage 주어진 함수 특성을 추출하는 방법?
이 덧붙여,의 IPv4/IPv6를 투명 호환성을 위해 당신은 아마 소켓'호출되고 싶지 같은 주소 :: 아니라 IPv4 전용 기존'gethostbyname' 해결보다는 getaddrinfo'을 인코딩 다음과 같습니다. – LeoNerd
답변을 주셔서 감사합니다, Alan and LeoNerd. 예 gethostbyname은 세 번째 옥텟에 '0'을 추가하므로 사용자가 잘못된 3 옥텟 IP를 입력하는 경우에도 스크립트가 올바른 출력을 제공합니다. 이 문제를 해결하는 방법? – user1500970
사용자 입력이 잘못되지 않았습니다. 형식 요구 사항이 더 엄격하다는 것을 검증하려면, 그렇게해야합니다. 아마도 정규식 테스트 일 것입니다. 하지만이 값은 다양한 주소 구문 분석 함수에 의해 완벽하게 수용 가능하므로 거부해야하는 이유는 알 수 없습니다. – LeoNerd