자동 변환 도구 (테스트는 아직 안 되었음)
- Checkv4 for Windows (Microsoft) [링크] [링크2]
- Socket Scrubber for Solaris (Sun)
- IPv6 Porting Assistant for Tru64 Unix (Compaq) [링크] [다운]
ipv6sniff.tar.tarIPv6 Porting Assistant for Tru64 Unix | IPv6socket_scrub.tarSocket Scrubber for Solaris |
socket()
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 로 변경
....
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 으로 바뀐다는 점만 제외하고는 동일하게
clisin6clisockfd = accept(sockfd, (struct sockaddr *)&clisin6,
(socklen_t *)&clilen);
aton -> pton
ntoa -> ntop
IPv4
문자열의 인터넷주소 -> 32bit 이진 데이타 주소 :
in_addr_t inet_addr( const char *cp);
32bit 이진 데이타 주소 -> 문자열의 인터넷주소 :
IPv6
문자열의 인터넷주소 -> 128bit 이진 데이타 주소 :
ex ) inet_pton(AF_INET6, "fe80::250:bfff:fe2c:7bb2", sin6_addr),
src(입력) = 진수 형태의 주소가 저장된 null-terminated character의 포인터
dst(출력) = 숫자형태의 주소가 저장될 버퍼의 포인터
128bit 이진 데이타 주소 -> 문자열의 인터넷주소 :
ex) inet_ntop(AF_INET6, (void *)&svrsin6.sin6_addr , addr6_str, 40)
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
ipv6sniff.tar.tar
Comments List
洹몃