어떻게되는지 보자, 우리?
내 위치에서 적어도, 나는 모두와 그것에 도달 할 수 있기 때문에 8.8.8.8는 좋은 예를하게 traceroute
하고 ping
.
먼저 ping 8.8.8.8
어떤 일이 일어나는지 살펴 보자 .
$ tcpdump -n host 8.8.8.8 or icmp
15:36:51.045994 IP 10.4.27.179 > 8.8.8.8: ICMP echo request, id 7215, seq 0, length 64
15:36:51.062458 IP 8.8.8.8 > 10.4.27.179: ICMP echo reply, id 7215, seq 0, length 64
15:36:52.048350 IP 10.4.27.179 > 8.8.8.8: ICMP echo request, id 7215, seq 1, length 64
15:36:52.073657 IP 8.8.8.8 > 10.4.27.179: ICMP echo reply, id 7215, seq 1, length 64
따라서 ping
ICMP 에코 요청을 보내고 ICMP 에코 응답이 필요합니다.
지금 traceroute -n 8.8.8.8
:
15:41:31.803324 IP 10.4.27.179.44838 > 8.8.8.8.33435: UDP, length 24
15:41:31.815184 IP 10.250.32.2 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.815343 IP 10.4.27.179.44838 > 8.8.8.8.33436: UDP, length 24
15:41:31.819654 IP 10.250.32.2 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.819791 IP 10.4.27.179.44838 > 8.8.8.8.33437: UDP, length 24
15:41:31.824609 IP 10.250.32.2 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.824754 IP 10.4.27.179.44838 > 8.8.8.8.33438: UDP, length 24
15:41:31.830506 IP 64.124.23.161 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.830649 IP 10.4.27.179.44838 > 8.8.8.8.33439: UDP, length 24
15:41:31.834469 IP 64.124.23.161 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.834565 IP 10.4.27.179.44838 > 8.8.8.8.33440: UDP, length 24
15:41:31.840962 IP 64.124.23.161 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.841061 IP 10.4.27.179.44838 > 8.8.8.8.33441: UDP, length 24
15:41:31.847440 IP 64.125.26.21 > 10.4.27.179: ICMP time exceeded in-transit, length 148
15:41:31.847634 IP 10.4.27.179.44838 > 8.8.8.8.33442: UDP, length 24
15:41:31.853664 IP 64.125.26.21 > 10.4.27.179: ICMP time exceeded in-transit, length 148
15:41:31.853761 IP 10.4.27.179.44838 > 8.8.8.8.33443: UDP, length 24
15:41:31.859221 IP 64.125.26.21 > 10.4.27.179: ICMP time exceeded in-transit, length 148
15:41:31.859269 IP 10.4.27.179.44838 > 8.8.8.8.33444: UDP, length 24
15:41:31.864149 IP 64.125.31.15 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.864192 IP 10.4.27.179.44838 > 8.8.8.8.33445: UDP, length 24
15:41:31.870843 IP 64.125.31.15 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.870922 IP 10.4.27.179.44838 > 8.8.8.8.33446: UDP, length 24
15:41:31.876200 IP 64.125.31.15 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.876352 IP 10.4.27.179.44838 > 8.8.8.8.33447: UDP, length 24
15:41:31.882148 IP 64.125.13.111 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.882249 IP 10.4.27.179.44838 > 8.8.8.8.33448: UDP, length 24
15:41:31.890076 IP 64.125.13.111 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.890156 IP 10.4.27.179.44838 > 8.8.8.8.33449: UDP, length 24
15:41:31.896100 IP 64.125.13.111 > 10.4.27.179: ICMP time exceeded in-transit, length 36
15:41:31.896163 IP 10.4.27.179.44838 > 8.8.8.8.33450: UDP, length 24
15:41:31.905037 IP 108.170.242.225 > 10.4.27.179: ICMP time exceeded in-transit, length 60
15:41:31.905235 IP 10.4.27.179.44838 > 8.8.8.8.33451: UDP, length 24
15:41:31.913206 IP 108.170.242.225 > 10.4.27.179: ICMP time exceeded in-transit, length 60
15:41:31.913283 IP 10.4.27.179.44838 > 8.8.8.8.33452: UDP, length 24
15:41:31.923428 IP 108.170.242.241 > 10.4.27.179: ICMP time exceeded in-transit, length 76
15:41:31.923520 IP 10.4.27.179.44838 > 8.8.8.8.33453: UDP, length 24
15:41:31.932266 IP 108.170.237.9 > 10.4.27.179: ICMP time exceeded in-transit, length 60
15:41:31.932441 IP 10.4.27.179.44838 > 8.8.8.8.33454: UDP, length 24
15:41:31.939961 IP 209.85.251.9 > 10.4.27.179: ICMP time exceeded in-transit, length 76
15:41:31.940043 IP 10.4.27.179.44838 > 8.8.8.8.33455: UDP, length 24
15:41:31.947460 IP 108.170.237.21 > 10.4.27.179: ICMP time exceeded in-transit, length 60
15:41:31.947508 IP 10.4.27.179.44838 > 8.8.8.8.33456: UDP, length 24
15:41:31.954824 IP 8.8.8.8 > 10.4.27.179: ICMP 8.8.8.8 udp port 33456 unreachable, length 36
15:41:31.954888 IP 10.4.27.179.44838 > 8.8.8.8.33457: UDP, length 24
15:41:31.963601 IP 8.8.8.8 > 10.4.27.179: ICMP 8.8.8.8 udp port 33457 unreachable, length 36
15:41:31.963671 IP 10.4.27.179.44838 > 8.8.8.8.33458: UDP, length 24
15:41:31.972407 IP 8.8.8.8 > 10.4.27.179: ICMP 8.8.8.8 udp port 33458 unreachable, length 36
따라서 traceroute
적어도 내가 설치 한 구현은 ICMP를 보내지 않습니다. 오히려 UDP 패킷을 보냅니다.
이 추적에서 보이지 않는 것은 ( 자세한 내용을 증가시키기 위해 tcpdump
a -v
를 주면 ) 첫 번째 프로브의 ttl이 1이고 이후 프로브의 ttl이 증가한다는 것입니다. 이로 인해 나와 8.8.8.8 사이의 라우터가 ICMP ttl 초과 오류로 응답하므로 traceroute가 여기저기서 라우터를 발견하는 방식입니다.
결국 ttl은 8.8.8.8까지 도달하기에 충분히 길며 8.8.8.8은 UDP 포트 44838에서 수신 대기하는 프로세스가 없기 때문에 ICMP 포트에 도달 할 수없는 오류로 응답합니다. .
여기와 그 사이에 모든 ICMP 가 차단되어 있으면 ping이나 traceroute가 작동하지 않습니다.
그러나 일반적으로 모든 ICMP가 차단 되는 경우 는 아니지만 드물지는 않습니다. 모든 ICMP를 차단하는 것은 문제가됩니다. 예를 들어 경로 MTU 발견을 중단 합니다. 이는 ICMP 조각화 요구 오류에 의존합니다. ICMP 패킷에는 유형과 코드가 있으며 책임있는 네트워크 운영자는 일부 유형이나 코드 (선택적 정보를 남용하거나 공개 할 가능성이있는 코드) 만 선택적으로 차단합니다.
예를 들어 일부 호스트는 ICMP 에코 요청에 전혀 응답하지 않으므로 핑이 작동하지 않습니다. 아이디어는 핑에 응답하지 않음으로써 공격자가 네트워크에 존재하는 호스트를 발견하기가 더 어렵다는 것입니다. 실제로 호스트를 검사하는 다른 방법이 있기 때문에 이것은 의문의 여지가 있습니다. 예를 들어, 웹 서버를 찾기 위해 TCP SYN을 포트 80으로 보낼 수 있습니다.
많은 호스트는 UDP 데이터 그램이나 TCP SYN을 프로세스 수신 대기가없는 포트로 가져올 때 ICMP 포트에 도달 할 수없는 오류를 보내지 않으므로 추적 경로가 손상됩니다. 다시 한 번 아이디어는 공격자가 네트워크를 매핑하는 것을 더욱 어렵게 만드는 것이지만 다시 한 번 공격자에게는 약간의 좌절입니다.
traceroute는 특정 프로토콜이 아닌 프로그램이므로 다른 방법으로도 조사 할 수 있습니다. 이들은 모두 라우터를 발견하기 위해 TTL을 늘리는 데 의존하지만 엔드 포인트에서 응답을 이끌어 낼 수있는 기회가 다소있을 수있는 다양한 종류의 프로브를 전송할 수 있습니다. 예를 들어, ping과 같은 ICMP 에코 프로브를 사용 man tcpdump
하는 -I
옵션이 나와 있습니다. 또한 -T
UDP 대신 TCP SYN 프로브를 사용해야합니다. 당신이 호스트가 응답 할 것입니다 알고있는 경우에 ping
그 다음 -I
많은 이해된다. 호스트가 특정 TCP 포트에서 수신 대기하고 있다는 것을 알고 있다면 -T
아마도 -p
포트 선택 옵션 과 함께 사용하는 것이 좋습니다.
불행히도 이러한 옵션에는 루트 또는 특수 기능이 필요할 수 있으므로 UDP는 적절한 기본값을 사용합니다. 실제로 비슷한 도구 인 tracepath
이 매뉴얼 페이지에서 다음과 같이 말합니다.
기술
이 경로를 따라 MTU를 발견하는 대상까지의 경로를 추적합니다. UDP 포트 포트 또는 임의의 포트를 사용합니다. traceroute와 유사하며 수퍼 유저 권한 만 필요하지 않으며 멋진 옵션이 없습니다.