netstat -ntap ไม่แสดงชื่อ pid / process สำหรับการเชื่อมต่อบางอย่าง?


11

ฉันมีเซิร์ฟเวอร์ ubuntu / hardy พร้อม kernel 2.6.24-23-server และ netstat:

# netstat --version
net-tools 1.60
netstat 1.42 (2001-04-15)

ปัญหาคือเรามีการเชื่อมต่อ ESTABLISHED จำนวนมากที่ไม่แสดง PID หรือชื่อโปรแกรมในnetstat -ntapเอาต์พุต Netstat ถูกเรียกมาจากรากไม่มี chroots, grsecurity และไม่มีอะไรแบบนี้ (หรืออย่างนั้นฉันก็บอก :)

มีความคิดเกี่ยวกับสิ่งที่อาจจะผิดหรือเปล่า?

UPDATE

lsof -n -i ทำงานได้ดีและแสดงชื่อ pid / process สำหรับการเชื่อมต่อ


2
คุณแน่ใจหรือว่าเรียกใช้เป็นรูทหรือด้วย sudo
Dom

ใช่มันทำงานบนรูทและแม้แต่บนรูทผ่าน sudo ผลกระทบเดียวกัน

คุณแน่ใจหรือว่าไม่ได้ทำอะไรnetstat -ntapแทนnetstat ntap?
Kyle Brandt

ฉันแน่ใจว่าฉันกำลังทำnetstat -ntap- เช่นเดียวกับฉันเขียน นี่เป็นวิธีที่ทางเลือกให้กับ netstat ตามหน้า man ของมัน

หมายเหตุด้านข้าง - ฉันเพิ่งตรวจสอบและดูเหมือนว่า netstat ไม่รู้จักตัวเลือกที่ให้โดยไม่มี "-"

คำตอบ:


4

สิ่งนี้จะเกิดขึ้นกับกระบวนการเคอร์เนลเช่น NFS แต่บางครั้งก็เกิดขึ้นกับแอปทั่วไป: RHEL 5 มีพฤติกรรมเหมือนกัน

# netstat -taupen | grep 30715
tcp        0      0 0.0.0.0:30715           0.0.0.0:*               LISTEN      66558      81467710   - 

โปรดสังเกตว่าในทางตรงกันข้ามคำที่ถูกต้อง:

# lsof -i:30715
AppName 1598 useracct   78u     IPv4           81467710                   TCP *:30715 (LISTEN)

4
198_141:~ # netstat  -anp|grep 33000
tcp        0      0 0.0.0.0:53000           0.0.0.0:*               LISTEN       -                   
198_141:~ # lsof -i:33000
COMMAND   PID USER   FD   TYPE     DEVICE SIZE NODE NAME
vsftpd  28147 root    3u  IPv4 4089990174       TCP *:33000 (LISTEN)
198_141:~ # id
uid=0(root) gid=100(users) groups=16(dialout),100(users)
198_141:~ # 

ในหัวหอมของฉันอาจมีสองสถานการณ์:

1) ผู้ใช้ที่มีสิทธิ์แบบปกติ excute "netstat" ไม่สามารถมองเห็นกระบวนการที่เปิดตัวโดยรูท

2) กระบวนการบางอย่างทำงานในเคอร์เนล


1

สำหรับการเชื่อมต่อที่สร้างขึ้นสิ่งนี้ควรเกิดขึ้นสำหรับการเชื่อมต่อที่เริ่มต้นจากพื้นที่เคอร์เนลเท่านั้นเช่น NFS หรือ DRBD เห็นได้ชัดว่าการรอคอยการเชื่อมต่ออาจทำให้กระบวนการตายไปข้างใต้ได้ หากคุณไม่สามารถระบุได้ว่าอะไรเป็นสาเหตุของการเชื่อมต่อที่กำหนดให้วางเอาต์พุตและบางคนสามารถบอกคุณได้ว่ามันคืออะไร


สิ่งเหล่านี้ไม่ใช่การเชื่อมต่อที่ใช้เคอร์เนลเนื่องจากเป็นการเชื่อมต่อกับฐานข้อมูลจากแอปพลิเคชัน

การส่งออกของ netstat -atnp | grep EST?
womble

นี่คือสิ่งที่ปัญหาของฉันคือ - การเชื่อมต่อมีการระบุไว้โดยแทนที่จะเป็น pid / ชื่อโปรแกรมฉันมี "-"

3
และฉันต้องการที่จะเห็นสิ่งที่เกิดขึ้นจริงมากกว่าการตีความของมัน
womble

ฉันไม่สามารถแสดงผลลัพธ์ทั้งหมดให้คุณได้เนื่องจากมีชื่อที่สามารถใช้ระบุสภาพแวดล้อมได้ บรรทัดสำหรับพอร์ตนี้โดยเฉพาะจะมีลักษณะดังนี้: "tcp 0 0 localhost: 36949 localhost: 6543 ESTABLISHED -"

1

ฉันมีพฤติกรรมเดียวกันและฉันเดาว่าพฤติกรรมของ netstat อาจมีการเปลี่ยนแปลง ตัวอย่างเช่นฉันเห็นพอร์ตและโปรแกรมสำหรับ 'wget' แต่ไม่ใช่สำหรับกระบวนการ Apache PHP ซึ่งเป็นสิ่งสำคัญสำหรับฉัน

วิธีแก้ปัญหา: ฉันเขียนสคริปต์ใหม่เพื่อใช้ lsof แทน (ดูคำแนะนำด้านบน)


Pascal: คุณรันคำสั่งนี้ด้วย sudo หรือเป็น root หรือไม่?
Stefan Lasiewski

0

มาถึงที่นี่เพราะวันนี้ฉันพบคำถามเดียวกันบน Ubuntu 18.04 LTS (netstat เป็นรุ่นเดียวกัน netstat 1.42 (2001-04-15)) แปลกยังไม่มีคำตอบหลังจาก 8 ปี หลังจากเรียกดูซอร์สโค้ดของเครื่องมือสุทธิฉันอาจพบมัน

ในซอร์สโค้ด netstat:

  1. โฟลเดอร์กระบวนการทั้งหมดใน / proc จะถูกทำซ้ำแต่ละ fd ในไดเรกทอรี / proc // fd จะถูกตรวจสอบเพื่อสร้างแผนที่จาก socket inode ไปยัง pid / progname

  2. ดังนั้น / proc / net / tcp จะถูกตรวจสอบเพื่อรับข้อมูลซ็อกเก็ต tcp (โดยฟังก์ชัน tcp_info) รวมถึงซ็อกเก็ตไอโหนด

  3. เมื่อเอาต์พุตข้อมูลซ็อกเก็ต tcp pid / progname จะถูกสอบถามจากแผนที่ในขั้นตอนที่ 1 ผ่านทางไอโหนดซ็อกเก็ต หากไม่พบสิ่งใดเลยเอาต์พุต '-'

หากซ็อกเก็ตถูกสร้างขึ้นหลังจากสร้างแผนที่แล้วจะไม่พบ pid / progname ในแผนที่

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