2013-06-03 1 views
0

원시 소켓을 사용하여 패킷을 보내려고합니다.가공 된 패킷의 목적지 IP와 원시 소켓의 목적지 IP 인수 사이의 차이점 send()

IP 패킷 (icmp, tcp 또는 udp 패킷)을 생성하면 소스 및 대상 IP가 IP 패킷에 포함됩니다. 지금은 다음과 같은 라인을 통해 그것을 보낼 :

memset(&sin, 0, sizeof(sin)); 
    sin.sin_family = AF_INET; 
    sin.sin_addr.s_addr = inet_addr(dst_ip); 
    sendto(sd, packet, 60, 0, (struct sockaddr *)&sin, sizeof(sin)); 

은 물론, dst_ip는 패킷의 목적지 IP와 동일해야합니다.

dst_ip이 패킷의 대상 IP와 다른 경우 어떻게 될지 궁금합니다. dst_ip은 패킷을 보내는 데 어떤 NIC를 사용해야하는지 결정하는 데 사용됩니다. 제작 된 패킷의 대상 IP는 dst_ip에 의해 변경되지 않고 네트워크 내 라우터에서 처리됩니다.

제 이해가 정확합니까? 다른 차이점이 있습니까?

감사합니다.

답변

0

BSD에 대한 대답은 rip_output():1의 소스 코드에 주석이 "사용자가 우리에게 완전한 패킷을 넘겨 경우, 그것을 사용합니다. 그렇지 않으면 헤더에 대한 MBUF을 할당하고 그것을 채우기"[예로부터 제공된 주소는 sendto()].

다른 시스템의 경우 커널 소스 코드를 읽어야합니다.

  1. G.R. Wright & W.R. Stevens, TCP/IP 그림, vol II : 구현, pp.1057-1062.
+0

내 질문과 대답 사이에 강한 관련성이 없습니다. – misteryes

+0

@misteryes 편집을 참조하십시오. – EJP

관련 문제