ฉันจะหาข้อมูลเพิ่มเติมเกี่ยวกับไฟล์ซ็อกเก็ตใน / proc / fd ได้อย่างไร


33

มองหาใน / proc / $ mypid / fd / ฉันเห็นไฟล์เหล่านี้

lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 0 -> /dev/pts/36 (deleted)
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 3 -> socket:[1424055856]
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 4 -> socket:[1424055868]
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 5 -> socket:[1424055882]

เพราะฉันเข้าถึงรหัสฉันรู้ว่าซ็อกเก็ตเหล่านี้เชื่อมโยงกับการเชื่อมต่อ TCP (อันหนึ่งคือการเชื่อมต่อกับพอร์ต 5672 ในเครื่องบางเครื่องอีกอันเป็นการเชื่อมต่อกับพอร์ต 3306 บนเครื่องอื่น) แต่ฉันต้องการรู้ว่าซ็อกเก็ตตัวใด เชื่อมโยงกับการเชื่อมต่อที่ ฉันจะทำสิ่งนั้นได้อย่างไร

โดยทั่วไปแล้วฉันจะถามระบบปฏิบัติการที่ปลายซ็อกเก็ตได้อย่างไร


1
ใช้socat....
heemayl

คำตอบ:


40

คำสั่ง lsof

lsofตัวเลือกที่ดีอาจจะมี ในฐานะที่เป็นรัฐมันเป็นประโยชน์สำหรับการได้รับข้อมูลเกี่ยวกับman lsofopen files such as Internet sockets or Unix Domain sockets


ใช้มัน

ในตอนแรกรับภาพรวมเกี่ยวกับ/proc/$PID/fd/และหมายเลขซ็อกเก็ตที่ระบุไว้
ตัวอย่างเช่นคุณsocket:[14240]อาจสนใจ

จากนั้นใช้lsof -i -a -p $PIDเพื่อพิมพ์รายการไฟล์เครือข่ายทั้งหมดที่$PIDใช้

  • -i สร้างรายการไฟล์เครือข่ายที่เป็นของผู้ใช้หรือกระบวนการ

  • -a รวมเหตุผลหรือพารามิเตอร์ที่กำหนดของ AND

  • -p $PID เลือกข้อมูลเกี่ยวกับกระบวนการของคุณเท่านั้น

ผลลัพธ์ทั่วไปสำหรับเบราว์เซอร์ของฉันที่รันด้วย PID 2543อาจเป็น:

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
browser 2543 pidi   55u  IPv4  14240      0t0  TCP  pidi.router.lan:55038->stackoverflow.com:https (ESTABLISHED)

และสายที่คล้ายกันมากขึ้น

ที่ดี! ตอนนี้ให้ดูที่DEVICEคอลัมน์ มันตรงกับซ็อกเก็ตที่ระบุไว้ก่อนหน้าของเราจาก/proc/$PID/fd/!
และต้องขอบคุณNAMEส่วนที่เราสามารถพูดได้ว่าส่วนอื่น ๆ ของซ็อกเก็ตของเราคืออะไร

ในโลกแห่งความเป็นจริงคุณอาจได้รับผลผลิตที่ดี แต่เพียงกรองหรือgrepเพื่อความน่าสนใจของคุณ

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


ขอขอบคุณ! โหวตขึ้นและยอมรับ ฉันเห็นซ็อกเก็ตปรากฏขึ้นใน lsof ว่า "unix 0xffff88002704d380 0t0 1423733559 ซ็อกเก็ต" ฉันจะขุดลงในสิ่งที่ 0xffff88002704d380 ได้อย่างไร
benhsu

1
"unix 0xfff ... " ดูเหมือนว่าที่อยู่หน่วยความจำเคอร์เนลของโครงสร้าง unix_sock โครงสร้างนี้มีตัวชี้ไปยังจุดสิ้นสุดซ็อกเก็ตของคุณ grep -rni ffff88002704d380 /procลองดูที่ ภายใต้ / proc / อาจโกหกคำตอบcatของคุณไฟล์ grep ของคุณพบ แต่อย่าตรึงฉันลงบนนี้ ... อาจจะผิดที่น่ากลัวที่นี่
pidi

lsofอ่านข้อมูลเพิ่มเติมเกี่ยวกับซ็อกเก็ตจาก/proc/net/tcp, /proc/net/tcp6, /proc/net/udpและอื่น ๆ ขึ้นอยู่กับประเภทซ็อกเก็ต
Jesin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.