เรามาดูกันว่าจะเกิดอะไรขึ้น
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 echo และคาดว่าจะมีการตอบกลับ 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
เพื่อเพิ่ม verbosity) คือโพรบแรกมี ttl เป็น 1 จากนั้นจะเพิ่ม ttl สำหรับโพรบในภายหลัง นี่ทำให้เราเตอร์ระหว่างฉันและ 8.8.8.8 ตอบสนองด้วย ICMP ttl เกินข้อผิดพลาดซึ่งเป็นวิธีที่ traceroute ค้นพบเราเตอร์ระหว่างที่นี่และที่นั่น
ในที่สุด ttl ก็นานพอที่จะทำให้มันมาถึง 8.8.8.8 และ 8.8.8.8 ตอบสนองกับข้อผิดพลาดที่ไม่สามารถเข้าถึงพอร์ต ICMP ได้เนื่องจากมันไม่มีกระบวนการฟังบนพอร์ต UDP 44838 นี่คือวิธีที่ traceroute รู้ว่าถึงปลายทางสุดท้าย .
หากมีบางสิ่งระหว่างที่นี่กับที่ปิดกั้นICMP ทั้งหมดแสดงว่าไม่มีการ ping หรือ traceroute ทำงาน
แต่โดยทั่วไปไม่ใช่กรณีที่ICMP ทั้งหมดถูกปิดกั้นแม้ว่าจะไม่ได้หายาก การบล็อก ICMP ทั้งหมดเป็นปัญหา: ตัวอย่างเช่นจะหยุดการค้นพบพา ธ MTUซึ่งขึ้นอยู่กับข้อผิดพลาดที่จำเป็นในการแยกส่วน ICMP แพ็คเก็ต ICMP มีประเภทและรหัสและผู้ให้บริการเครือข่ายที่รับผิดชอบจะเลือกบล็อกหรือรหัสบางประเภทเท่านั้นผู้ที่มีแนวโน้มว่าจะถูกละเมิดหรือเปิดเผยข้อมูลเฉพาะ
ตัวอย่างเช่นบางโฮสต์จะไม่ตอบสนองต่อคำขอ ICMP echo เลยและ ping จะไม่ทำงาน ความคิดคือโดยไม่ตอบสนองต่อการปิงเป็นการยากยิ่งขึ้นที่ผู้โจมตีจะค้นพบว่ามีโฮสต์ใดบ้างบนเครือข่าย ในทางปฏิบัตินี่เป็นคำถามที่น่าสงสัยเนื่องจากมีวิธีอื่น ๆ ในการสอบสวนหาโฮสต์ ตัวอย่างเช่นหนึ่งสามารถส่ง TCP SYN ไปยังพอร์ต 80 เพื่อค้นหาเว็บเซิร์ฟเวอร์
โฮสต์จำนวนมากจะไม่ส่งข้อผิดพลาดที่ไม่สามารถเข้าถึงพอร์ต ICMP เมื่อพวกเขาได้รับดาตาแกรม UDP หรือ TCP SYN ไปยังพอร์ตที่พวกเขาไม่ได้รับฟังกระบวนการและนี่จะเป็นการหยุดพักชั่วคราว แนวคิดก็คือทำให้ผู้โจมตีทำแผนที่เครือข่ายได้ยากขึ้น แต่นี่เป็นเพียงความหงุดหงิดเล็กน้อยสำหรับผู้โจมตี
เนื่องจาก traceroute เป็นโปรแกรมและไม่ใช่โปรโตคอลเฉพาะใด ๆ จึงมีวิธีการตรวจสอบอื่น ๆ พวกเขาทั้งหมดพึ่งพาการเพิ่ม TTL เพื่อค้นหาเราเตอร์ แต่โพรบชนิดต่าง ๆ สามารถส่งซึ่งอาจมีโอกาสมากหรือน้อยที่จะล้วงเอาการตอบสนองจากจุดสิ้นสุด ตัวอย่างเช่นฉันman tcpdump
แสดงรายการ-I
ตัวเลือกในการใช้ ICMP echo probes เหมือนกับ ping นอกจากนี้ยัง-T
ต้องใช้โพรบ TCP SYN แทน UDP หากคุณรู้ว่าโฮสต์จะตอบสนองping
จากนั้น-I
ทำให้รู้สึกมาก หากคุณรู้ว่าโฮสต์กำลังฟังบนพอร์ต TCP โดยเฉพาะ-T
อาจใช้งานร่วมกับ-p
ตัวเลือกในการเลือกพอร์ต
น่าเสียดายที่ตัวเลือกเหล่านี้อาจต้องการรูทหรือความสามารถพิเศษดังนั้น UDP จึงเป็นค่าเริ่มต้นที่ยุติธรรม ในความเป็นจริงเครื่องมือที่คล้ายกันtracepath
มีสิ่งนี้จะพูดในหน้าคน:
รายละเอียด
มันติดตามเส้นทางไปยังปลายทางที่ค้นหา MTU ตามเส้นทางนี้ ใช้พอร์ตพอร์ต UDP หรือพอร์ตสุ่ม มันคล้ายกับ traceroute เพียงไม่ต้องการสิทธิ์ superuser และไม่มีตัวเลือกแฟนซี