2013-11-22 2 views
0

Linux에서 datalink 원시 소켓 프로그래밍을 배우고 있는데, 도움이되는 examples을 발견했습니다. 나는 icmp4_ll.c를 컴파일하고 같은 LAN에있는 다른 컴퓨터에 ICMP 패킷을 보내는데 사용했다. 대상 컴퓨터에서 응답을받을 수 있습니다. 그러나 로컬 컴퓨터로 ICMP 패킷을 보낼 때, 원본 및 대상 이더넷 MAC 및 IP 주소를 eth0의 MAC 및 IP 주소로 설정하면 eth0 또는 lo에서 ICMP 응답을받을 수 없습니다. 인터페이스 (Wireshark에서 eth0을 통해 전송 된 ICMP 요청 만 알았지 만 모든 인터페이스에서는 ICMP 응답이 없습니다.) ICMP 요청 메시지가 올바르게 구성되어 있다고 생각합니다. 그렇지 않으면 원격 대상이 응답하지 않습니다. 그러나 OS가 왜 그 요청에 답장을 보내지 않는지 나는 모른다. 도움이나 힌트를 주시면 감사하겠습니다. 는 ICMP 메시지로컬 인터페이스를 통해 datalink 원시 소켓을 사용하여 ICMP를 보내고 받으십시오.

+0

회신을받지 못한 경우 에코 요청이 잘못되었거나 다른 곳에서 회신을 차단하는 것이 있습니다. – nos

+0

나는이 가능성을 생각하고 있었지만 동일한 프로그램을 사용하여 원격 컴퓨터에 ICMP 요청을 보내면 원격 컴퓨터의 응답 양식을 볼 수 있습니다. 프로그램이 로컬 인터페이스에 요청을 보내는 데 사용될 때만 응답이 누락됩니다. – user2975098

답변

0

RFC 792 정의 특수 조건 :

  • 없음 ICMP 오류 메시지가 무한 반복을 피하기 위해 ICMP 오류 메시지에 대한 응답으로 전송됩니다.

  • 조각화 된 IP 데이터 그램의 경우 조각화 된 0 (첫 번째 조각)의 오류에 대해서만 ICMP 메시지가 전송됩니다.

  • 브로드 캐스트 또는 멀티 캐스트 주소로 지정된 데이터 그램에 대한 응답으로 ICMP 오류 메시지가 보내지지 않습니다.

  • ICMP 오류 메시지는 링크 계층 브로드 캐스트로 전송 된 데이터 그램에 대한 응답으로 절대로 전송되지 않습니다.

  • ICMP 에러 메시지는 그 소스 주소를 고유 한 호스트를 표시하지 않는 데이터 그램에 대한 응답으로 전송되지 않습니다 (주소 가 제로가 될 수없는 소스, 루프백 주소, 브로드 캐스트 주소 또는 멀티 캐스트 주소).

  • ICMP 오류 메시지는 어떤 종류의 IGMP 메시지에 대해서도 보내지 않습니다. 알 수없는 형식의 ICMP 메시지를 받으면 반드시 을 버려야합니다.

라우터는 거의 항상 ICMP 메시지를 생성하지만이 대상 호스트에 올 때, ICMP 메시지의 수는 구현에 의존 생성.

관련 문제