ใช้ bash's `/ dev / udp` ฉันจะรู้ได้อย่างไรว่าพอร์ตนั้นเปิดอยู่


14

ฉันไม่สามารถเข้าถึงnetcatหรือnmapดังนั้นฉันพยายามใช้bashและ/dev/udp/ไฟล์พิเศษเพื่อทดสอบพอร์ต

ฉันสามารถทำสิ่งที่ชอบ:

echo "" > /dev/udp/example.com/8000

แต่$?จะเป็นเสมอ0เมื่อใช้ UDP ฉันสมมติว่านั่นเป็นเพราะค่าส่งคืนของecho ""คำสั่งถูกต้องหรือไม่

โดยทั่วไปฉันพยายามทำซ้ำสิ่งที่ฉันสามารถทำได้ด้วยnmapและnetcat:

nmap -sU -p 8000 example.com | grep open >/dev/null && echo 'open'
nc -z -u example.com 8000 && echo 'open'

ฉันจะทำสิ่งนี้ด้วยได้/dev/udpอย่างไร


1
UDP ไม่รับประกันการจัดส่งดังนั้นแม้ว่า bash จะคิดว่าการส่งข้อความสำเร็จ แต่ข้อความนั้นอาจถูกทำลายไปแล้ว คุณทดสอบการส่งที่ไม่สำเร็จได้อย่างไร (ไม่ใช่การเชื่อมต่อที่ไม่สำเร็จ: UDP ไม่ใช่การเชื่อมต่อ)
Gilles 'หยุดความชั่วร้าย'

คำตอบ:


13

สำหรับ TCP, $?เพียงแค่การตรวจสอบ หากการเชื่อมต่อล้มเหลว$?จะไม่0:

$ >/dev/tcp/google.com/81
bash: connect: Network is unreachable
bash: /dev/tcp/google.com/81: Network is unreachable
$ echo $?
1

จะใช้เวลาในbashการตระหนักว่าการเชื่อมต่อล้มเหลว คุณสามารถใช้การหมดเวลาเพื่อทริกเกอร์bash:

$ timeout 1 bash -c '>/dev/tcp/google.com/80' &&
  echo Port open ||
  echo Port close
Port open

การทดสอบพอร์ต udp นั้นซับซ้อนกว่า

พูดอย่างเคร่งครัดไม่มีสถานะเปิด (แน่นอน udp เป็นโปรโตคอลไร้สัญชาติ ) กับ udp มีอยู่เพียงสองรัฐที่มี UDP, ฟังหรือไม่ หากสถานะไม่เป็นเช่นนั้นคุณจะได้รับICMP ปลายทางไม่สามารถเข้าถึงได้

น่าเสียดายที่ไฟร์วอลล์หรือเราเตอร์มักจะวางแพ็กเก็ต ICMP เหล่านั้นดังนั้นคุณจะไม่แน่ใจว่าสถานะของพอร์ต udp คืออะไร


ตอบคำถามของฉันอีกครั้งเพื่อมุ่งเน้นที่ UDP ฉันขอโทษสำหรับการแก้ไขนินจา ฉันคิดว่ามันจะคล้ายกันดังนั้นจึงไม่ทำให้เกิดความแตกต่าง ขอบคุณที่ล้างมัน
Belmin Fernandez

10

โดยทั่วไปแล้วคุณไม่สามารถ

ซึ่งแตกต่างจาก TCP, UDP ไม่มีการเชื่อมต่อ คุณไม่สามารถตรวจพบว่าพอร์ตเปิดอยู่เพียงแค่ทำการเชื่อมต่อแบบไม่ต้องทำอะไรกับพอร์ต TCP แต่คุณต้องส่งข้อมูลไปยังพอร์ตและดูว่าเกิดอะไรขึ้นและรายละเอียดของ UDP ที่นำมาใช้ในโลกแห่งความเป็นจริงทำให้การตีความผลลัพธ์เป็นไปได้ยาก แม้แต่เครื่องมือระดับแพ็คเก็ตที่ซับซ้อนอย่างที่nmapไม่สามารถบอกได้อย่างแน่นอนว่ามีโปรแกรมกำลังฟังพอร์ต UDP ที่ให้มา nmapแบ่งประเภทพอร์ต UDP ออกเป็นสามกลุ่ม:

  1. เปิดแน่นอน การส่งแพ็คเก็ตไปยังพอร์ตทำให้เกิดการตอบสนองข้อมูลจากเครื่องปลายทาง
  2. ปิดแน่นอน การส่งแพ็คเก็ตไปยังพอร์ตแสดงข้อความ "ICMP Destination Unreachable" จากเครื่องปลายทาง
  3. เปิดหรือกรอง การส่งแพ็คเก็ตไปยังพอร์ตนั้นไม่ตอบสนองใด ๆ อาจมีไฟร์วอลล์ที่วางแพ็กเก็ต อาจมีการฟังรายการและnmapไม่ได้คิดหาวิธีตอบกลับ บางทีผู้ใช้อาจโชคร้ายและแพ็คเก็ตทั้งหมดก็หายไประหว่างการขนส่ง

nmapข้อมูลที่ดีเกี่ยวกับ ขอบคุณสิ่งนี้ทำให้เกิดความสับสนมาก
Belmin Fernandez
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.