ฉันมีบริการรักษาพอร์ตที่เปิดอยู่
ฉันได้รับข้อมูลมาโดยที่ฉันไม่ได้คาดหวังและไม่ต้องการที่จะรับและฉันพยายามระบุแหล่งที่มาของข้อมูลนี้ ดังนั้นฉันจะค้นหากระบวนการที่ส่งข้อมูลไปยังพอร์ตเฉพาะได้อย่างไรเมื่อเทียบกับกระบวนการที่กำลังรับฟัง
ฉันมีบริการรักษาพอร์ตที่เปิดอยู่
ฉันได้รับข้อมูลมาโดยที่ฉันไม่ได้คาดหวังและไม่ต้องการที่จะรับและฉันพยายามระบุแหล่งที่มาของข้อมูลนี้ ดังนั้นฉันจะค้นหากระบวนการที่ส่งข้อมูลไปยังพอร์ตเฉพาะได้อย่างไรเมื่อเทียบกับกระบวนการที่กำลังรับฟัง
คำตอบ:
สำหรับ TCP (แม้ว่าวิธีการเดียวกันนี้จะใช้ได้กับ SCTP 1หรือโปรโตคอลการขนส่งที่เน้นการเชื่อมต่อใด ๆ ) เช่นเดียวกับการค้นหาสิ่งที่ฟัง
lsof -nPi tcp:the-port
จะรายงานกระบวนการที่มีซ็อกเก็ต TCP เปิดอยู่บนพอร์ตนั้น หากคุณรู้ว่าพอร์ตต้นทาง (แอปพลิเคชันเซิร์ฟเวอร์ของคุณสามารถรู้ได้และบันทึกไว้) คุณสามารถใช้สิ่งนั้นแทนการระบุไคลเอนต์โกง
สำหรับซ็อกเก็ต UDP หรือ RAW มันอาจจะยากกว่า แต่ฉันคิดว่ามันเป็นสิ่งที่ systemtap หรือ dtrace มีประโยชน์ อาจจะตรวจสอบเช่นกัน
1แม้ว่าจะมีการเพิ่มการสนับสนุน SCTP (บน Linux เท่านั้น) lsof
ในเวอร์ชัน 4.86 คุณไม่สามารถใช้-i
เพื่อขอซ็อกเก็ต SCTP ได้อย่างชัดเจน ที่นี่สามารถใช้lsof -nP | grep -w 'SCTP.*:the-port'
เป็นฮิวริสติกแทน
ลองต่อไปนี้:
$sudo ss -tp
หรือ:
$sudo netstat -A inet -p
วิธีหลีกเลี่ยงผลลัพธ์ localhost:
$sudo netstat -A inet -p | grep -v localhost
หากต้องการแสดงรายการการเชื่อมต่อ ESTABLISHED เท่านั้นให้ทำดังนี้
$sudo netstat -A inet -p | grep -v localhost | grep ESTABLISHED
ขึ้นอยู่กับประเภทของการเชื่อมต่อที่กำหนดเพื่อส่งข้อมูลวิธีใดวิธีหนึ่งเหล่านี้จะช่วยให้คุณได้รับ
ใช้tcpdump port 1234
เพื่อรับข้อมูลที่ส่งไปยังพอร์ตนี้ คุณสามารถใช้โปรแกรมเช่น Wireshark เพื่อวิเคราะห์บนเครื่องอื่น (จับภาพเป็นไฟล์โดยใช้-w
ตัวเลือก) หรือใช้ Wireshark โดยตรง
ในกรณีที่มันสร้างและเปิดการเชื่อมต่อ tcp / udp คุณสามารถใช้netstat
เพื่อค้นหา IP ระยะไกลของการเชื่อมต่อ
รายการซ็อกเก็ตที่เปิดของกระบวนการตามคำตอบที่ได้รับจาก @StephaneChazelas
คุณอาจใช้sockstat
คำสั่งเพื่อค้นหากระบวนการที่เริ่มต้นการเชื่อมต่อกับบริการของคุณบนโฮสต์ท้องถิ่น
DESCRIPTION
The sockstat command lists open Internet or UNIX domain sockets.
เพียงจับคู่การเชื่อมต่อต้นทางทั้งหมดกับปลายทางของคุณ สามารถใช้งานได้กับ TCP / UDP / UNIXsockets
บน Solaris การรัน pfiles บนกระบวนการทั้งหมดควรแสดงกระบวนการที่เปิดการเชื่อมต่อใด มันจะต้องมีการตรวจสอบไฟล์บางไฟล์อย่างระมัดระวังอาจใช้ตัวเลือก -A, -g ของ ggrep ...
บน Linux netstat -anp --inet
จะทำงานได้แม้ไม่ติดตั้ง lsof (ดรอปดาวน์--inet
เพื่อรับซ็อกเก็ตโดเมน Unix เช่นกัน)