โดยไม่ใช้บรรทัดคำสั่งเครือข่ายใน linux จะรู้รายชื่อพอร์ตที่เปิดและกระบวนการที่เป็นเจ้าของได้อย่างไร


11

ฉันต้องการทราบว่าพอร์ตใดบ้างที่ใช้ในกระบวนการที่ฝังตัวในลินุกซ์ เนื่องจากเป็น Embedded-linux แบบเรียบง่ายจึงไม่มีบรรทัดคำสั่งเครือข่ายเช่น netstat, lsof (มีเพียงบรรทัดคำสั่งพื้นฐานเช่น cat, cp, echo ฯลฯ เท่านั้น)

วิธีแก้ปัญหาบางส่วนดูเหมือนจะใช้บรรทัดคำสั่ง "cat / proc / net / tcp" และ "cat / proc / net / udp" อย่างไรก็ตามฉันไม่แน่ใจว่ารายการที่พิมพ์จากบรรทัดคำสั่งเหล่านั้นแสดงพอร์ตทั้งหมดที่ใช้งานอยู่และรายการไม่ได้แสดงว่ากระบวนการใดถูกผูกไว้กับพอร์ตที่แน่นอน

ความคิดเห็นใด ๆ ที่จะได้รับการชื่นชม


ฉันคิดว่าคำถามนี้เหมาะกว่าสำหรับUnix & Linux

คำตอบ:


15

คุณควรจะสามารถที่จะหาพอร์ตที่เปิดทั้งหมดในและ/proc/net/tcp /proc/net/udpแต่ละไฟล์เหล่านั้นมีinodeคอลัมน์ซึ่งสามารถใช้เพื่อค้นหากระบวนการที่เป็นเจ้าของซ็อกเก็ตนั้น

เมื่อคุณมีหมายเลขไอโหนดคุณสามารถเรียกใช้คำสั่ง ls เช่นls -l /proc/*/fd/* | grep socket:.$INODEเพื่อค้นหากระบวนการโดยใช้ซ็อกเก็ตนั้น ในกรณีที่กระบวนการถูกตั้งค่าด้วยตัวอธิบายไฟล์ที่แตกต่างกันสำหรับเธรดที่แตกต่างกันคุณอาจต้องขยายคำสั่งls -l /proc/*/task/*/fd/* | grep socket:.$INODEเพื่อค้นหาทั้งหมด


1
find /proc -lname "socket:\[$INODE\]" 2> /dev/null
Sammitch

0

เพื่อค้นหา INODES สำหรับพอร์ตใด ๆ ดำเนินการด้านล่างคำสั่ง

PORT=8080;cat /proc/net/* | awk -F " " '{print $2 ":" $10 }' | grep -i `printf "%x:" $PORT` | awk -F ":" '{print "PORT=" $2 ", INODE=" $3 }'

ใช้ INODE จากเอาต์พุตคำสั่งด้านบนเพื่อค้นหา PID ที่เกี่ยวข้องดังต่อไปนี้

find /proc -lname "socket:\[$INODE\]" 2> /dev/null | head -n 1 | awk -F "/" '{print "PID="$3}'

ที่นี่ $ INODE คือมูลค่าของ INODE ใด ๆ

ในคำสั่งบรรทัดเดียวเราสามารถตรวจสอบว่าพอร์ตใด ๆ เปิดอยู่และเชื่อมโยงกับ PID ใด ๆ ดังต่อไปนี้

PORT=8080;find /proc -lname "socket:\[$(cat /proc/net/* | awk -F " " '{print $2 ":" $10 }' | grep -i `printf "%x:" $PORT` | head -n 1 | awk -F ":" '{print $3}')\]" 2> /dev/null | head -n 1 | awk -F "/" '{print "PID="$3}'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.