2013-06-06 1 views
4

입력 된 IP 주소가 유효하고 모두 0 (0.0.0.0 또는 00.00.0.0)이 아닌지 확인하기 위해 inet_pton을 사용하고 있습니다. 입력의 IP (SRC) 주소의 src 값이 00.00.00.00 인 경우 0을 소중히하는 0.0.0.0 inet_pton 세트 DST 인 경우inet_pton 모든 0 IP 주소

inet_pton(int af, const char *src, void *dst) 

는 DST 값은 0 아니지만, 각각의 흔적에 대한 임의의 값을 가져옵니다. 왜 가치를 0.00.00.00 변환 inet_pton 0

#include <string.h> 
#include <arpa/inet.h> 

void main(int argc, char *argv[]) 
{ 
    int s; 
    struct in_addr ipvalue; 

    printf("converting %s to network address \n", argv[1]); 
    s = inet_pton(AF_INET, argv[1], &ipvalue); 

    if(s < 0) 
      printf("inet_pton conversion error \n"); 

    printf("converted value = %x \n", ipvalue.s_addr); 
} 

샘플

올바른 값 실행 :

./a.out 10.1.2.3 
converting 10.1.2.3 to network address 
converted value = 302010a 

./a.out 0.0.0.0 
converting 0.0.0.0 to network address 
converted value = 0 

잘못된 결과 :

./a.out 00.00.00.0 
converting 00.00.00.0 to network address 
converted value = **a58396a0** 

./a.out 00.0.0.0 
converting 00.0.0.0 to network address 
converted value = **919e2c30** 

답변

6

당신은 확인하지 않는 0 반환 inet_pton() 경우 man page of inet_pton 상태 :

inet_pton()는 (네트워크 주소가 성공적으로 변환 된)의 성공에 1을 반환합니다. src에 지정된 주소 패밀리의 유효한 네트워크 주소를 나타내는 문자열을 포함하지 않으면 0이 반환됩니다. 유효한 주소 패밀리를 포함하지 않는 AF는, -1을 반환하고 errno는

이 같은 시도 EAFNOSUPPORT로 설정되어있는 경우 : 의심 문서를 읽을 때

#include <stdio.h> 
#include <arpa/inet.h> 


int main(int argc, char *argv[]) 
{ 
    int s; 
    struct in_addr ipvalue; 

    printf("converting %s to network address \n", argv[1]); 
    s = inet_pton(AF_INET, argv[1], &ipvalue); 

    switch(s) { 
     case 1: 
      printf("converted value = %x \n", ipvalue.s_addr); 
      return 0; 
     case 0: 
      printf("invalid input: %s\n", argv[1]); 
      return 1; 
     default: 
      printf("inet_pton conversion error \n"); 
      return 1; 
    } 
} 
1

합니다.

man inet_pton 내 리눅스 박스에 오류 반환 확인이 잘못되었다고 알려줍니다. 성공하면 1을 반환합니다. 다른 것은 오류입니다. 0은 유효하지 않은 변환을 의미합니다. -1은 유효하지 않은 주소 군을 의미합니다.