อ่าน“ / proc” เพื่อทราบว่ากระบวนการเปิดพอร์ตหรือไม่


13

ฉันจำเป็นต้องรู้ว่ากระบวนการที่มี PID ที่กำหนดเป็นเปิดพอร์ตโดยไม่ใช้คำสั่งภายนอกหรือไม่ ฉันต้องใช้/procระบบไฟล์ ฉันสามารถอ่าน/proc/$PID/net/tcpไฟล์ได้และรับข้อมูลเกี่ยวกับพอร์ต TCP ที่เปิดโดยกระบวนการ อย่างไรก็ตามในกระบวนการมัลติเธรด/proc/$PID/task/$TIDไดเร็กทอรีจะมีnet/tcpไฟล์ด้วย คำถามของฉันคือ:

ฉันจะต้องข้ามnet/tcpไฟล์เธรดทั้งหมดหรือไม่พอร์ตที่เปิดโดยเธรดจะถูกเขียนลงในnet/tcpไฟล์กระบวนการ

คำตอบ:


23

ฉันสามารถอ่านไฟล์ / proc / $ PID / net / tcp และรับข้อมูลเกี่ยวกับพอร์ต TCP ที่เปิดโดยกระบวนการ

ไฟล์ที่ไม่ได้อยู่ในรายชื่อของพอร์ต TCP เปิดโดยกระบวนการ มันเป็นรายการสินค้าทั้งหมดของ TCP พอร์ตเปิดใน namespace เครือข่ายในปัจจุบันและสำหรับกระบวนการทำงานใน namespace เครือข่ายเดียวกันเป็นเหมือนกัน/proc/net/tcpกับเนื้อหาของ

เพื่อหาพอร์ตที่เปิดโดยกระบวนการของคุณคุณจะต้องได้รับรายชื่ออธิบายซ็อกเก็ตจาก/proc/<pid>/fdและจากนั้นตรงกับอธิบายเหล่านั้นไปยังเขตของinode/proc/net/tcp


ขอบคุณสำหรับคำตอบ. และถ้ากระบวนการมัลติเธรดฉันจำเป็นต้องไปที่fdไดเรกทอรีทั้งหมดของแต่ละเธรดหรือไม่ หรือ/proc/pid/fdไดเรกทอรี "สืบทอด" /proc/pid/task/tid/fdไดเรกทอรีหรือไม่
rmonjo

ฉันไม่แน่ใจ แต่ดูเหมือนจะเป็นเรื่องง่ายที่จะทดสอบ
larsks

8
@rmonjo เธรดไม่สามารถเปิดไฟล์ได้มีเพียงกระบวนการเท่านั้น fdไดเรกทอรีของด้ายเพียงซ้ำfdไดเรกทอรีของกระบวนการ
Gilles 'หยุดชั่วร้าย'

0

โปรด

cat /proc/$PID/net/tcp

และคุณจะได้ผลลัพธ์เช่นนี้

  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
  0: 00000000:01BB 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 2891985097 1 0000000000000000 100 0 0 10 0

คอลัมน์ที่สอง (local_address) ของผลลัพธ์แสดงพอร์ตในเลขฐานสิบหก ใช้โปรแกรมคำนวณเพื่อแปลงรหัสฐานสิบหกเป็นทศนิยม

ตัวอย่างเช่นที่นี่พอร์ต: 01BB (เป็นเลขฐานสิบหก) เท่ากับ 433 (เป็นทศนิยม) ซึ่งเป็นพอร์ตเริ่มต้นของ HTTPS

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