반응형
소켓 생성
socket( ${family}, SOCK_RAW, ${protocol});

family : IPv4 - AF_INET
          IPv6 - AF_INET6

protocol : /usr/include/netinet/in.h 참조


protocol을 IPPROTO_RAW를 사용할 경우 ip헤더도 직접 조작하여 패킷을 전송할 수 있다.

IPv4에서는 ip헤더를 직접 조작한다는 옵션을 필히 주어야 한다.

int on = 1;
...
setsockopt( raw_socket, IPPROTO_IP, IP_HDRINCL, (char *)&on, sizeof(on) );


IPv4에서는 IPPROTO_RAW로 생성한 소켓끼리 통신이 가능하다.
IPv6에서는 IPPROTO_RAW로 생성한 소켓을 전송할 때 받는 쪽에서는 전송하는 패킷의 페이로드에 해당하는 protocol로 생성한 소켓이어야 받을 수 있다.

+ Recent posts