การปิงพอร์ต UDP นั้นค่อนข้างยุ่งยากเนื่องจากไม่มีการเชื่อมต่อ หากคุณไม่สามารถควบคุมรีโมตโฮสต์ได้คุณอาจไม่เคยรู้เลยจริงๆว่าได้รับดาตาแกรม UDP ของคุณหรือไม่ ผมถือว่าคุณรู้อยู่แล้วว่าไม่ว่าจะเป็นพื้นที่ห่างไกลสามารถเข้าถึงได้ผ่านทางping
, traceroute
, mtr
และอื่น ๆ (ถ้าไม่ได้ตรวจสอบว่าเป็นครั้งแรก!)
ถัดไปเนื่องจากคุณไม่มีnetcat
คุณจะต้องมีวิธีการสร้างแพ็กเก็ต UDP
bash
เปลือกส่งแพ็คเก็ต UDP /dev/udp/host/port
เมื่อคุณเปลี่ยนเส้นทางข้อมูลไปยังอุปกรณ์พิเศษ ตัวอย่างเช่น:
#!/bin/bash
host="10.10.10.10"
port=12345
echo "PING" >/dev/udp/$host/$port
แน่นอนว่า Python นั้นสามารถใช้ UDP ได้อย่างสมบูรณ์เช่น
#!/bin/python
import socket
host="10.10.10.10"
port=12345
udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_sock.sendto('PING', (host, port))
ไม่ว่าคุณจะสร้างแพ็กเก็ต "ping" UDP ของคุณอย่างไรคุณจะต้องการทราบว่าเป้าหมายได้รับหรือไม่ หากพอร์ตเป้าหมายเปิดอยู่ (เช่นบริการกำลังฟังที่พอร์ตที่กำหนด) สิ่งที่เกิดขึ้นจะถูกกำหนดโดยแอปพลิเคชัน หวังว่าคุณจะสังเกตเห็นพฤติกรรมหรือข้อบ่งชี้บางอย่างจากระบบระยะไกล
หากปิดพอร์ตเป้าหมาย (เช่นไม่มีบริการกำลังฟังที่พอร์ตนั้น) คุณควรได้รับแพ็กเก็ตข้อผิดพลาด ICMP กลับมา ใช้ดมกลิ่นเครือข่ายระดับสายที่คุณชื่นชอบเพื่อดูมัน หรือบางทีระบบ HP-UX ของคุณบันทึกข้อผิดพลาด ICMP บางแห่ง (ขออภัยฉันไม่มีประสบการณ์กับ HP-UX)
น่าเสียดายถ้าเป้าหมายถูกไฟร์วอลล์คุณอาจไม่ได้รับการตอบสนองเมื่อปิดพอร์ตเป้าหมาย วิธีที่ปลอดภัยเพียงวิธีเดียวที่จะทราบได้ว่ารีโมตโฮสต์ตอบสนองได้หรือไม่คือเรียกใช้แอพพลิเคชั่นที่ขึ้นอยู่กับข้อมูล UDP และดูปริมาณการใช้เครือข่าย