แสดงพอร์ตที่กระบวนการ PID กำลังฟัง (ควรใช้เครื่องมือ iproute2) หรือไม่


68

ฉันกำลังค้นหารายการพอร์ตทั้งหมดที่ PID กำลังฟังอยู่

คุณจะแนะนำอย่างไรให้ฉันได้รับข้อมูลประเภทนี้เกี่ยวกับกระบวนการ


แปลกมากที่ssไม่มีการกรอง PID ยกเว้นซ็อกเก็ต netlink
poige

คำตอบ:


56

คุณสามารถใช้ssจากแพ็คเกจ iproute2 (ซึ่งคล้ายกับnetstat):

ss -l -p -n | grep "pid=1234,"

หรือ (สำหรับรุ่น iproute2 ที่เก่ากว่า):

ss -l -p -n | grep ",1234,"

แทนที่ 1234 ด้วย PID ของโปรแกรม


3
นอกจากนี้ยังมี-uหรือ-tสำหรับ udb หรือ tcp เท่านั้น : +1: และสิ่งเหล่านี้ทั้งหมดสามารถซ้อนกันได้เช่น: ss -tlnpและเพื่อกำจัดเอาต์พุตความกว้างของการเติมซึ่งฉันพบว่าน่ารำคาญคุณสามารถใช้ท่อแม้ว่าแมวหรือน้อยกว่าหรือ w / e:ss -tlnp | cat
ThorSummoner

1
ฉันได้ติดนิสัยss -nlp | catที่คร่าวๆแสดงให้ฉันเห็นกระบวนการฟัง (-l) หมายเลขพอร์ตของพวกเขา (-n) และข้อมูลกระบวนการของพวกเขา (-p) และอย่าพยายามปรับเอาท์พุทให้พอดีกับเปลือกของฉัน| cat( หรือน้อยกว่าหรืออะไรก็ตาม) ใช้เวลาเพียงสองปีเท่านั้นที่ฉันจะคุ้นเคยกับสิ่งนั้น: D
ThorSummoner

ไม่ได้ผลสำหรับฉัน (บน Debian 9) คุณจำเป็นต้อง grep สำหรับ ", pid = 1234,"
ofrommel

@ofrommel ขอบคุณสำหรับคำแนะนำ - ฉันปรับคำตอบ
jofel

นอกจากนี้ยังใช้งานได้เฉพาะกับการอนุญาตรูท :)
ofrommel

56

ฉันไม่ทราบวิธีการใช้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)

ฉันได้รับคำสั่งนี้จากที่นี่แต่ไม่แน่ใจในลิงก์ที่แน่นอนเนื่องจากฉันได้บันทึกไว้ในสมุดบันทึก แต่คุณสามารถตรวจสอบจากที่นั่นเช่นกัน


13

คุณสามารถใช้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

1
ขอบคุณแม้ว่าฉันได้รับแจ้งว่าnetstatเลิกใช้งานเครื่องมือ iproute2 แล้วและฉันต้องการหลีกเลี่ยง
ThorSummoner

12

คำตอบของ @ 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

อ้างอิง


1

อีกวิธีสำหรับlsofถ้าคุณไม่รู้จัก PID แต่เป็นเพียงชื่อของโปรแกรม:

lsof -Pa -p $(pgrep [programName]) -i

ไม่ทำงานกับlsof4.89 ใน Ubuntu 16.04
palik

1
จะเป็นกรณีนี้หากโปรแกรมเกิดกระบวนการหลายอย่างซึ่งในกรณีนี้คุณจะต้องระบุ PID เฉพาะเมื่อเรียกใช้คำสั่ง lsof ที่ฉันให้ไว้ pgrep <program name>จากนั้นเลือก PID ที่คุณต้องการสำหรับคำสั่งด้านบน แทนที่$(pgrep [programName])ด้วย PID #
cryptoboy

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