EzDoum

찾기
처음으로 | 찾기 | 아카이브 | 글 올리기 | 링크 | 자료실 | 통계 | 연락처 | 자유게시판
이지도움 특집
전체보기
네트워크
TI OMAP35x
TI DaVinci
Analog Blackfin
RobotWar2005
임베디드!
캐쉬의 모든것
메모리 할당 알고리즘
CPU 파이프라이닝
자료구조(Tree)
금융

Login
이름

암호

기억하기


사용자 등록

현재 접속중인 등록 사용자는 0명, 익명 사용자는 3명 입니다.
전체 등록 사용자: 751명

마지막 답장
·libcurl + fuse 조합으로 되는게 많네. (1)
·Linux Ftrace에 관해 (3)
·Android MTP ( Media Transfer Protocol ) (1)
·Lighttpd에 인증을 digest 사용시 IE 오동작 문제? (1)
·Dtrace에 관해 (1)

최근글
·OpenSSL and multi-threads (0)
·ARM 환경에서 OpenCL 사용 (0)
·IoT용 WIFI 모듈 비교 ( MCU ) 클래스 (0)
·Glances - 리눅스 여러 가지 항목을 한 화면에서 모니터링 (0)
·plugin 방식의 로그 분석기 (0)

뜨거운 감자
·나는 인터렉티브한 환경에서 역어셈블 한다. (12)
·GNU REGEX (정규표현식) 프로그래밍 강좌 (7)
·SoCRobotWar 2005 - 신입생 기초 교육자료 (7)
·ASP.NET의 데이터 그리드와 사용자 컨트롤 (7)
·DHTML Editing Control (7)

가장 많이 읽은 글
·[Cache] 2-way Set-Associative 방식이란 무엇일까? (2)
·멀티쓰레드(Pthread) 프로그래밍
·GNU REGEX (정규표현식) 프로그래밍 강좌 (7)
·Sorting Algorithm Animation (2)
·SoCRobotWar 2005 - 신입생 기초 교육자료 (7)

network programming 주소변환
글쓴이: EzDoum 글쓴날: 2007년 03월 23일 오후 01:39
리눅스



네트워크 주소변환에 관한 정리
http://man.cx/gethostbyname(3)/ko
http://man.cx/inet_pton(3) 예제
http://man.cx/inet_ntop(3)


fd로 상대편 주소 정보 얻기
http://man.cx/getpeername/ko


fd로 내 주소 얻기
http://man.cx/getsockname/ko

  • 첨부 파일: ipaddr.png ipaddr.png (4 KiB(4,350 Bytes))

    [Image Size 466 x 334]
    ipaddr.png



    [분류: 리눅스 인쇄용 페이지 본문 email로 보내기 ]

  • <  network programming 잠깐 non-blocking | 예비군 훈련 통지서  >
    network programming 주소변환 | 답장: 2개 | 본문에 답장
    정렬 :  
    답장 EzDoum 2007년 03월 29일 오후 03:21 [ 이글에 답장 | 본문에 답장 | 책갈피 ]
    1. #include <arpa/inet.h>
    2.  
    3. int inet_aton(const char *strptr, struct in_addr *addrptr);
    4. //Returns: 1 if string was valid, 0 on error
    5.  
    6. in_addr_t inet_addr(const char *strptr);
    7. //Returns: 32-bit binary network byte ordered IPv4 address; INADDR_NONE if error
    8.  
    9. char *inet_ntoa(struct in_addr inaddr);
    10. //Returns: pointer to dotted-decimal string


    1. #include <arpa/inet.h>
    2.  
    3. int inet_pton(int family, const char *strptr, void *addrptr);
    4. //Returns: 1 if OK, 0 if input not a valid presentation format, -1 on error
    5.  
    6. const char *inet_ntop(int family, const void *addrptr, char *strptr, size_t len);
    7. //Returns: pointer to result if OK, NULL on error

    The family argument for both functions is either AF_INET or AF_INET6. If family is not supported, both functions return an error with errno set to EAFNOSUPPORT.



    http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=/rzab6/socaddr.htm

    Socket address structure
    1. //BSD 4.3 structure
    2. struct sockaddr{
    3.   u_short   sa_family;
    4.   char      sa_data [14];
    5. };
    6. struct sockaddr_storage{
    7.   sa_family_t  ss_family;
    8.   char         _ss_pad1[_SS_PAD1SIZE];
    9.   char*        _ss_align;
    10.   char         _ss_pad2[_SS_PAD2SIZE];
    11. };
    12.  
    13. //BSD 4.4/ UNIX 98 compatible structure
    14.  struct sockaddr {
    15.   uint8_t       sa_len;
    16.   sa_family_t   sa_family
    17.   char          sa_data[14]
    18. };
    19. struct sockaddr_storage {
    20.   uint8_t       ss_len;
    21.   sa_family_t   ss_family;
    22.   char          _ss_pad1[_SS_PAD1SIZE];
    23.   char*         _ss_align;
    24.   char          _ss_pad2[_SS_PAD2SIZE];
    25. };


    AF_INET address family

    1. //BSD 4.3 sockaddr_in address structure
    2. struct sockaddr_in {
    3.   short          sin_family;
    4.   u_short        sin_port;
    5.   struct in_addr sin_addr;
    6.   char           sin_zero[8];
    7. };
    8.  
    9. //BSD 4.4/ UNIX 98 sockaddr_in address structure
    10.  struct sockaddr_in {
    11.   uint8_t         sin_len;
    12.   sa_family_t     sin_family;
    13.   u_short         sin_port;
    14.   struct in_addr  sin_addr;
    15.   char            sin_zero[8];
    16. };
    17.  


    AF_INET6 address family

    1. //BSD 4.3 sockaddr_in6 address structure
    2.  struct sockaddr_in6 {
    3.   sa_family_t     sin6_family;
    4.   in_port_t       sin6_port;
    5.   uint32_t        sin6_flowinfo;
    6.   struct in6_addr sin6_addr;
    7.   uint32_t        sin6_scope_id;
    8.  };
    9.  
    10. //BSD 4.4/ UNIX 98 sockaddr_in6 address structure
    11.   struct sockaddr_in6 {
    12.   uint8_t         sin6_len;
    13.   sa_family_t     sin6_family;
    14.   in_port_t       sin6_port;
    15.   uint32_t        sin6_flowinfo;
    16.   struct in6_addr sin6_addr;
    17.   uint32_t        sin6_scope_id;
    18.  };



    AF_UNIX address family

    1. //BSD 4.3 sockaddr_un address structure
    2. struct sockaddr_un {
    3.      short    sun_family;
    4.      char     sun_path[126];
    5. };
    6. //BSD 4.4/ UNIX 98 sockaddr_un address structure
    7.  struct sockaddr_un {
    8.   uint8_t     sun_len;
    9.   sa_family_t sun_family;
    10.   char        sun_path[126];
    11. };





    [수정]

    답장 EzDoum 2007년 04월 18일 오후 03:41 [ 이글에 답장 | 본문에 답장 | 책갈피 ]
    http://man.cx/getaddrinfo(3)
    struct addrinfo {
    int ai_flags;
    int ai_family;
    int ai_socktype;
    int ai_protocol;
    size_t ai_addrlen;
    struct sockaddr *ai_addr;
    char *ai_canonname;
    struct addrinfo *ai_next;
    };




    getaddrinfo 사용 예제
    1. int
    2. tcp_connect(const char *host, const char *serv)
    3. {
    4.         int                    sockfd, n;
    5.         struct addrinfo hints, *res, *ressave;
    6.  
    7.         bzero(&hints, sizeof(struct addrinfo));
    8.         hints.ai_family = AF_UNSPEC;
    9.         hints.ai_socktype = SOCK_STREAM;
    10.  
    11.         if ( (n = getaddrinfo(host, serv, &hints, &res)) != 0)
    12.                 err_quit("tcp_connect error for %s, %s: %s",
    13.                                  host, serv, gai_strerror(n));
    14.         ressave = res;
    15.  
    16.         do {
    17.                 sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
    18.                 if (sockfd < 0)
    19.                         continue;       /* ignore this one */
    20.  
    21.                 if (connect(sockfd, res->ai_addr, res->ai_addrlen) == 0)
    22.                         break;    /* success */
    23.  
    24.                 Close(sockfd)/* ignore this one */
    25.         } while ( (res = res->ai_next) != NULL);
    26.  
    27.         if (res == NULL)        /* errno set from final connect() */
    28.                 err_sys("tcp_connect error for %s, %s", host, serv);
    29.  
    30.         freeaddrinfo(ressave);
    31.  
    32.         return(sockfd);
    33. }
    34.  
    35.  

    1.  
    2. #include <stdio.h>
    3. #include <stdlib.h>
    4. #include <memory.h>
    5.  
    6. #include <sys/types.h>
    7. #include <sys/socket.h>
    8. #include <netdb.h>
    9.  
    10. int
    11. convert_hostaddr(const char *host, struct addrinfo *ret_hints)
    12. {
    13.         int                    ret;
    14.         struct addrinfo hints, *res_hints, *tmp_hints;
    15.         char            *serv = "domain";
    16.         struct sockaddr_in *addr;
    17.        
    18.         memset(&hints, 0x00, sizeof(struct addrinfo));
    19.        
    20.         hints.ai_family = AF_UNSPEC;
    21.         hints.ai_socktype = SOCK_STREAM;
    22.  
    23.         if ( (ret = getaddrinfo(host, serv, &hints, &res_hints)) != 0)
    24.         {
    25.                 printf("%s : error %s\n", __FUNCTION__, host, gai_strerror(ret));
    26.                 return -1;
    27.         }              
    28.                
    29.         memcpy(ret_hints, res_hints, sizeof(struct addrinfo));
    30.         tmp_hints = res_hints;
    31.        
    32.         do {
    33.                         addr = (struct sockaddr_in *)tmp_hints->ai_addr;
    34.                        
    35.                         printf("%s : hints [%d][%d][%d][%d][%d]\n", __FUNCTION__,
    36.                                 tmp_hints->ai_flags, tmp_hints->ai_family, tmp_hints->ai_socktype,
    37.                                 tmp_hints->ai_protocol, tmp_hints->ai_addrlen );
    38.  
    39.                         printf("%s : [%s]\n", __FUNCTION__, inet_ntoa(addr->sin_addr) );
    40.  
    41.         } while ( (tmp_hints = tmp_hints->ai_next) != NULL);
    42.        
    43.         freeaddrinfo(res_hints);
    44.  
    45.         return 1;
    46. }
    47.  
    48.  
    49. int main(int argc, void **argv)
    50. {
    51.         struct addrinfo hints;
    52.         int ret, i=0;
    53.         struct hostent *myhost; 
    54.  
    55.         memset(&hints, 0x00, sizeof(struct addrinfo));
    56.        
    57.         if(argc < 2) return 0;
    58.                                
    59.         ret = convert_hostaddr( argv[1], &hints);
    60.         printf("host[%s] ret[%d]\n", argv[1], ret);
    61.        
    62.         return 0;       
    63. }
    64.  
    65.  

    [수정]

    network programming 주소변환 | 답장: 2개 | 본문에 답장
    정렬 :  

    답장 쓰기
    글을 올리시려면 로그인 (사용자 등록) 하셔야 합니다.

    검색
    Google

    분류
    ·공지 (6)
    ·인터넷 (87)
    ·하드웨어 (260)
    ·C/C++ (65)
    ·어셈블리 (7)
    ·리눅스 (136)
    ·리눅스 커널 (67)
    ·윈도우즈 (25)
    ·데이터베이스 (20)
    ·보안 (16)
    ·.NET (25)
    ·그래픽 (13)
    ·책소개 (42)
    ·호기심 천국 (80)
    ·잡담 (111)
    ·사랑 (3)

    전체 본문수: 963
    전체 답장수: 525


    분류 : 리눅스
    최근글
    최근글
    가장 많이 읽은 글
    ·멀티쓰레드(Pthread) 프로그래밍 (0)
    뜨거운 감자
    ·GNU REGEX (정규표현식) 프로그래밍 강좌 (7)

    EzDoum투표
    이지도움 어때요?
    이게 뭐야. 다시 안올란다. --;
    아이 좋아라~ +_+;
    관심없다.
    먼가는 있는거 같은데 뭐하는 곳이지?
    기타 (자유게시판에 글로 남겨 주세요)
    [ 결과 | 투표 ]

    랜덤 링크
    http://kldp.net


     Home ^ BACK TO TOP ^ EzDoum - 도움이 필요하세요~??
     Powered by KorWeblog 1.5.8 Copyleft © 2001 EzDoum, 관리자: EzDoum