ฉันจะค้นหากระบวนการที่ส่งข้อมูลไปยังพอร์ตเฉพาะได้อย่างไร


21

ฉันมีบริการรักษาพอร์ตที่เปิดอยู่

ฉันได้รับข้อมูลมาโดยที่ฉันไม่ได้คาดหวังและไม่ต้องการที่จะรับและฉันพยายามระบุแหล่งที่มาของข้อมูลนี้ ดังนั้นฉันจะค้นหากระบวนการที่ส่งข้อมูลไปยังพอร์ตเฉพาะได้อย่างไรเมื่อเทียบกับกระบวนการที่กำลังรับฟัง

คำตอบ:


23

สำหรับ 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'เป็นฮิวริสติกแทน


นี่ใช้ไม่ได้กับ SCTP สำหรับฉัน
sudo

1
@sudo ดูการแก้ไข
Stéphane Chazelas

3

ลองต่อไปนี้:

$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

2

ขึ้นอยู่กับประเภทของการเชื่อมต่อที่กำหนดเพื่อส่งข้อมูลวิธีใดวิธีหนึ่งเหล่านี้จะช่วยให้คุณได้รับ

  • ใช้tcpdump port 1234เพื่อรับข้อมูลที่ส่งไปยังพอร์ตนี้ คุณสามารถใช้โปรแกรมเช่น Wireshark เพื่อวิเคราะห์บนเครื่องอื่น (จับภาพเป็นไฟล์โดยใช้-wตัวเลือก) หรือใช้ Wireshark โดยตรง

  • ในกรณีที่มันสร้างและเปิดการเชื่อมต่อ tcp / udp คุณสามารถใช้netstatเพื่อค้นหา IP ระยะไกลของการเชื่อมต่อ

  • รายการซ็อกเก็ตที่เปิดของกระบวนการตามคำตอบที่ได้รับจาก @StephaneChazelas


1

คุณอาจใช้sockstatคำสั่งเพื่อค้นหากระบวนการที่เริ่มต้นการเชื่อมต่อกับบริการของคุณบนโฮสต์ท้องถิ่น

DESCRIPTION
     The sockstat command lists open Internet or UNIX domain sockets.

เพียงจับคู่การเชื่อมต่อต้นทางทั้งหมดกับปลายทางของคุณ สามารถใช้งานได้กับ TCP / UDP / UNIXsockets


0

บน Solaris การรัน pfiles บนกระบวนการทั้งหมดควรแสดงกระบวนการที่เปิดการเชื่อมต่อใด มันจะต้องมีการตรวจสอบไฟล์บางไฟล์อย่างระมัดระวังอาจใช้ตัวเลือก -A, -g ของ ggrep ...

บน Linux netstat -anp --inetจะทำงานได้แม้ไม่ติดตั้ง lsof (ดรอปดาวน์--inetเพื่อรับซ็อกเก็ตโดเมน Unix เช่นกัน)

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