[ 소켓 생성/연결관련 API ]


자동 변환 도구 (테스트는 아직 안 되었음)

ipv6sniff.tar.tar

IPv6 Porting Assistant for Tru64 Unix

IPv6socket_scrub.tar

Socket Scrubber for Solaris


socket()

socket(PF_INET, SOCK_STREAM, 0);      /*  IPv4 TCP  */
       socket(PF_INET6, SOCK_STREAM, 0);    /*  IPv6TCP  */

socket(PF_INET, SOCK_DGRAM, 0);     /*  IPv4 UDP  */
       socket(PF_INET6, SOCK_DGRAM, 0);    /*  IPv6 UDP  */

Bind()  // sockaddr_in 가  sockaddr_in6 로 변경

struct sockaddr_in6 sin6;
....
sin6.sin6_family   = AF_INET6;
sin6.sin6_flowinfo = 0;
sin6_sin6_port     = htons(23);
sin6.sin6_addr     = in6addr_any;  //in6addr_any는 IPv4의 INADDR_ANY와 같음
                                               // 자동으로 시스템의 IP주소 할당
....
if (bind(s, (struct sockaddr *)&sin6, sizeof(sin6)) == -1)
{   
  // 에러처리
}

*참고 Sockaddr관련 구조체들

listen() //그대로 사용

accept() // 2번째 아규먼트인 소켓구조체 가 sockaddr_in 으로 바뀐다는 점만 제외하고는 동일하게

struct sockaddr_in6
clisin6clisockfd = accept(sockfd, (struct sockaddr *)&clisin6,
             (socklen_t *)&clilen);

[ 주소 변환 관련 API ]

aton -> pton
ntoa -> ntop

IPv4
문자열의 인터넷주소 ->  32bit 이진 데이타 주소 :  

int       inet_aton (const char *cp, struct in_addr *inp);
in_addr_t inet_addr( const char *cp);



32bit 이진 데이타 주소 -> 문자열의 인터넷주소  :

char     *inet_ntoa(struct in_addr in);


IPv6
문자열의 인터넷주소 ->  128bit 이진 데이타 주소 :  

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

ex ) inet_pton(AF_INET6, "fe80::250:bfff:fe2c:7bb2", sin6_addr),

af(입력) = 프로토콜 종류 지정 (AF_INET, AF_INET6)
src(입력) = 진수 형태의 주소가 저장된 null-terminated character의 포인터
dst(출력) =  숫자형태의 주소가 저장될 버퍼의 포인터

128bit 이진 데이타 주소 -> 문자열의 인터넷주소 :

const char *inet_ntop(int af, const void *src, char *dst, size_t cnt);

ex) inet_ntop(AF_INET6, (void *)&svrsin6.sin6_addr , addr6_str, 40)

af(입력) = 프로토콜 종류 지정 (AF_INET, AF_INET6)
src(입력) = IPv4/6의 숫자형태의 주소가 저장된 버퍼의 포인터
dst(출력) = 결과값을 저장할 버퍼의 포인터
size(출력) = dst에 위해서 포인팅되는 버퍼의 크기 ,IPv6는 46

#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
  ulong ipv4_addr;
  char  ipv6_addr[16];
  char addr4_str[20];
  char addr6_str[40];
  struct in_addr  st_addr4;
  struct in6_addr st_addr6;

  // IPv4 인터넷 주소 변환 예제
    inet_pton(AF_INET, "192.168.0.224", (void *)&ipv4_addr);
  printf("%lu\n", ipv4_addr);

  st_addr4.s_addr = ipv4_addr;
  inet_ntop(AF_INET, (void *)&st_addr4,addr4_str,sizeof(addr4_str));
  printf("%s\n\n", addr4_str);

  // IPv6 인터넷 주소 변환 예제
  inet_pton(AF_INET6, "3ffe:ffff:0:f101::1", (void *)&ipv6_addr);
  memcpy((void *)&st_addr6, (void *)&ipv6_addr, sizeof(st_addr6));
  inet_ntop(AF_INET6, (void *)&st_addr6, addr6_str, sizeof(addr6_str));
  printf("%s\n", addr6_str);
}    

참고 : IPv6 Programing by 윤상배
작성 : 2006.05.11 by 임헌정
http://www.4ellene.net

2006/05/11 21:36 2006/05/11 21:36
Trackback address :: http://4ellene.net/tt/trackback/857

Comments List

  1. tit archive 2008/05/23 04:29

  2. pic of teen girls pissing 2008/05/23 05:07

  3. teen panty tease 2008/05/23 06:03

  4. wrestling women topless 2008/05/24 00:44

    洹몃

Write a comment.

[로그인][오픈아이디란?]