ฉันกำลังค้นหารายการพอร์ตทั้งหมดที่ PID กำลังฟังอยู่
คุณจะแนะนำอย่างไรให้ฉันได้รับข้อมูลประเภทนี้เกี่ยวกับกระบวนการ
ฉันกำลังค้นหารายการพอร์ตทั้งหมดที่ PID กำลังฟังอยู่
คุณจะแนะนำอย่างไรให้ฉันได้รับข้อมูลประเภทนี้เกี่ยวกับกระบวนการ
คำตอบ:
คุณสามารถใช้ss
จากแพ็คเกจ iproute2 (ซึ่งคล้ายกับnetstat
):
ss -l -p -n | grep "pid=1234,"
หรือ (สำหรับรุ่น iproute2 ที่เก่ากว่า):
ss -l -p -n | grep ",1234,"
แทนที่ 1234 ด้วย PID ของโปรแกรม
-u
หรือ-t
สำหรับ udb หรือ tcp เท่านั้น : +1: และสิ่งเหล่านี้ทั้งหมดสามารถซ้อนกันได้เช่น: ss -tlnp
และเพื่อกำจัดเอาต์พุตความกว้างของการเติมซึ่งฉันพบว่าน่ารำคาญคุณสามารถใช้ท่อแม้ว่าแมวหรือน้อยกว่าหรือ w / e:ss -tlnp | cat
ss -nlp | cat
ที่คร่าวๆแสดงให้ฉันเห็นกระบวนการฟัง (-l) หมายเลขพอร์ตของพวกเขา (-n) และข้อมูลกระบวนการของพวกเขา (-p) และอย่าพยายามปรับเอาท์พุทให้พอดีกับเปลือกของฉัน| cat
( หรือน้อยกว่าหรืออะไรก็ตาม) ใช้เวลาเพียงสองปีเท่านั้นที่ฉันจะคุ้นเคยกับสิ่งนั้น: D
ฉันไม่ทราบวิธีการใช้iproute2
เครื่องมือ แต่สำหรับวิธีแก้ปัญหาคุณสามารถลองอันนี้ได้
lsof -Pan -p PID -i
ควรให้ข้อมูลที่คุณต้องการ
เอาท์พุต
lsof -Pan -p 27808 -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 27808 apache 5u IPv6 112811294 0t0 TCP *:80 (LISTEN)
httpd 27808 apache 7u IPv6 112811298 0t0 TCP *:8443 (LISTEN)
httpd 27808 apache 9u IPv6 112811303 0t0 TCP *:443 (LISTEN)
ฉันได้รับคำสั่งนี้จากที่นี่แต่ไม่แน่ใจในลิงก์ที่แน่นอนเนื่องจากฉันได้บันทึกไว้ในสมุดบันทึก แต่คุณสามารถตรวจสอบจากที่นั่นเช่นกัน
คุณสามารถใช้netstat
สิ่งนี้เพื่อหา pid ของแต่ละกระบวนการฟัง
netstat - พิมพ์การเชื่อมต่อเครือข่าย, ตารางการเราต์, สถิติอินเตอร์เฟส, การเชื่อมต่อปลอมแปลงและการเป็นสมาชิกแบบหลายผู้รับ
-a, - แสดงทั้งซ็อกเก็ตการฟังและไม่ฟัง (สำหรับ TCP นี่หมายถึงการเชื่อมต่อที่สร้างไว้แล้ว) ด้วยตัวเลือก - อินเทอร์เฟซให้แสดงอินเตอร์เฟสที่ไม่ได้ทำเครื่องหมาย
- ตัวเลข, -n แสดงที่อยู่ตัวเลขแทนการพยายามกำหนดโฮสต์สัญลักษณ์, พอร์ตหรือชื่อผู้ใช้
-p, - โปรแกรมแสดง PID และชื่อของโปรแกรมที่แต่ละซ็อกเก็ตอยู่
นี่คือตัวอย่าง:
# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1507/rpcbind
tcp 0 0 0.0.0.0:51188 0.0.0.0:* LISTEN 1651/rpc.statd
tcp 0 0 0.0.0.0:1013 0.0.0.0:* LISTEN 1680/ypbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1975/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1763/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2081/master
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 2119/mongod
tcp 0 48 172.16.33.73:22 172.16.127.110:51850 ESTABLISHED 25473/sshd
tcp 0 0 172.16.33.73:22 172.16.127.110:51214 ESTABLISHED 24699/sshd
tcp 0 0 :::111 :::* LISTEN 1507/rpcbind
tcp 0 0 :::9200 :::* LISTEN 1994/java
tcp 0 0 :::9300 :::* LISTEN 1994/java
tcp 0 0 :::22 :::* LISTEN 1975/sshd
tcp 0 0 ::1:631 :::* LISTEN 1763/cupsd
tcp 0 0 ::1:25 :::* LISTEN 2081/master
tcp 0 0 :::59162 :::* LISTEN 1651/rpc.statd
netstat
เลิกใช้งานเครื่องมือ iproute2 แล้วและฉันต้องการหลีกเลี่ยง
คำตอบของ @ jofelจะแสดงเครื่องมือที่เหมาะสมในการใช้งานss
นี่คือการเปลี่ยนสำหรับเครื่องมือเครือข่ายอื่น ๆ ใน iproute2
คำสั่งที่เลิกใช้แล้วและเทียบเท่า iproute2 ของพวกเขามีดังนี้:
deprecated replacement(s)
========== ==============
- arp ip n (ip neighbor)
- ifconfig ip a (ip addr), ip link, ip -s (ip -stats)
- iptunnel ip tunnel
- iwconfig iw
- nameif ip link, ifrename
- netstat ss, ip route (for netstat-r), ip -s link (for netstat -i),
ip maddr (for netstat-g)
- route ip r (ip route)
รายการพื้นฐานยังอยู่ที่นี่ในวิกิพีเดีย: http://en.wikipedia.org/wiki/Iproute2
อีกวิธีสำหรับlsof
ถ้าคุณไม่รู้จัก PID แต่เป็นเพียงชื่อของโปรแกรม:
lsof -Pa -p $(pgrep [programName]) -i
lsof
4.89 ใน Ubuntu 16.04
pgrep <program name>
จากนั้นเลือก PID ที่คุณต้องการสำหรับคำสั่งด้านบน แทนที่$(pgrep [programName])
ด้วย PID #
ss
ไม่มีการกรอง PID ยกเว้นซ็อกเก็ต netlink