วิธีใช้ netstat เพื่อแสดงว่ากระบวนการกำลังรับฟังพอร์ตใด


27

ฉันใช้แล็ปท็อป OS X Mountain Lion และมีกล่อง Vagrant สองกล่องอยู่ ฉันพยายามคิดว่ากระบวนการใดบ้างที่รับฟังพอร์ต 8080 การเปลี่ยนแปลงของฉันผลิตได้เหมือนร้อยบรรทัด แต่ไม่มีใครที่มีหมายเลขพอร์ตเฉพาะ ฉันถือว่าบางสิ่งเช่น:

netstat -XXX | grep 8080

นี่คือการตั้งค่าในบ้านหรือสภาพแวดล้อมที่เป็นมืออาชีพ?
ลูคัสคอฟฟ์แมน

ดีสร้างเซิร์ฟเวอร์ enviro ในพื้นที่ ถ้าคุณต้องการที่จะย้ายไปยังเว็บไซต์ที่แตกต่างกันก็ไม่เป็นไร netstat เวอร์ชันต่าง ๆ สนับสนุนอาร์กิวเมนต์ต่างกัน
timpone

เอาล่ะครับทุกอย่างดูเหมือนจะอยู่ที่นี่โปรดดำเนินการต่อและมีวันที่ดี
ลูคัสคอฟฟ์แมน

คำตอบ:


52

น่าเสียดายที่ OSX คุณติดกับ BSD netstatซึ่งจะไม่แสดง ID กระบวนการที่แนบมากับพอร์ตที่ระบุ lsofสิ่งที่คุณต้องทำคือการใช้แทน ไวยากรณ์ที่คุณต้องใช้คือ:

lsof -i :8080

นี่จะพิมพ์ข้อมูลจำนวนมากซึ่งส่วนใหญ่คุณไม่สนใจ แต่ฟิลด์มีป้ายกำกับที่ดี ตัวอย่างเช่นตรวจสอบผลลัพธ์ตัวอย่างนี้

lsof -i :53237
COMMAND   PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
GoogleTal 927 guest   29u  IPv4 0x2c3f7f95244855c3      0t0  TCP localhost:53237 (LISTEN)

สิ่งนี้บอกฉันว่ามีการใช้พอร์ต 53237 โดยกระบวนการ ID 927 เมื่ออ่านฟิลด์คำสั่งโปรดจำไว้ว่าผลลัพธ์นี้ถูกตัดทอนในความเป็นจริงชื่อเต็มของไบนารีคือ GoogleTalkPlugin


ขอบคุณสิ่งนี้ทำให้ฉันเข้าใกล้มากขึ้นมันจะเป็นเรื่องทั่วไปพอสมควรVBoxHeadl- มีวิธีใดบ้างที่จะดูว่าอินสแตนซ์ VirtualBox (มีสองตอนนี้) หรือฉันกำลังถามทางมากเกินไป ขอบคุณ
timpone

@timpone: ฉันไม่รู้เกี่ยวกับ VirtualBox มากพอที่จะช่วยคุณในเส้นทางนั้น คุณสามารถตรวจสอบบรรทัดคำสั่งกระบวนการเพื่อดูว่ามันอยู่ในรายการที่นั่นหรือใช้lsof -p PIDและเรียกดูรายการของไฟล์ที่เปิดจนกว่าคุณจะพบมัน
Scott Pack

เจ๋งขอบคุณสำหรับความช่วยเหลือ
timpone

8

นี่คือสิ่งที่ฉันต้องการใช้เมื่อค้นหา PID ของพอร์ตการรับฟัง สำหรับ Linux ใช้:netstat -tunlp

  • เครือข่าย n
  • l ฟังพอร์ต
  • p กระบวนการ
  • tcp
  • คุณ udp

ข้อมูลเพิ่มเติมสามารถพบได้ในหน้าคน


-pไม่แสดงรายการอาร์กิวเมนต์ของโปรแกรม ฉันจะดูสิ่งนี้ได้อย่างไร
jameshfisher

4
OP ถามเกี่ยวกับ OSX -p ไม่ใช่ตัวเลือกสำหรับ netstat เวอร์ชั่น OSX
Ted Bigham

-pใน OSX portเป็น ฉันเกลียดการตัดสินใจที่นักพัฒนาที่จะทำให้ข้อโต้แย้งที่แตกต่างกันสำหรับ OSX และ Linux ...
แดเนียลดับบลิว

5

ฉันอยู่ระหว่างการแก้ไขnetstatบน OS X เพื่อให้คุณลักษณะนี้และสะดุดกับความจริงที่ว่า-vจะให้ pid ที่เกี่ยวข้องกับซ็อกเก็ต


การ-vเพิ่มระดับความฟุ่มเฟื่อยและเป็นเอกสาร developer.apple.com/library/mac/documentation/Darwin/Reference/…
Leathe

1
ขออภัยฉันหมายถึงความจริงที่ว่ามันพิมพ์ PID ไม่ได้รับการบันทึกไว้ไม่ใช่ตัวเลือกที่มีอยู่
Sean Hamilton

4

สำหรับฉันสองบรรทัดต่อไปนี้ทำงานได้ดีที่สุดในการแสดงว่าแอพใดที่มีพอร์ตเปิดฟังอยู่และช่องสัญญาณ, lsof นั้นข้ามแพลตฟอร์มทั้งหมด:

netstat -Watn | grep LISTEN
lsof -Pnl +M -i -cmd | grep LISTEN

1

เพื่อหาพอร์ตเฉพาะใช้ด้านล่างคำสั่ง netstat

  netstat -an | grep ':8080'

3
OP ถามเกี่ยวกับกระบวนการ สิ่งนี้ไม่แสดง ID กระบวนการ
Ted Bigham

1

จากผู้ชาย netstat

-p, - โปรแกรมแสดง PID และชื่อของโปรแกรมที่แต่ละซ็อกเก็ตอยู่

ฉันมักจะทำสิ่งนี้: netstat -antup | grep 8080


อืมม ... เสียงนี้เหมือนสิ่งที่ฉันต้องการ แต่นี่คือการให้ฉันตัวเลือกที่แตกต่างกันใน OS X สำหรับ -p-p protocol Show statistics about protocol, which is either a well-known name
timpone

@timpone: การ-pแสดง PID เป็นคำสั่ง GNU netstat ในขณะที่ OSX ใช้ BSD netstat
Scott Pack

-pไม่แสดงรายการอาร์กิวเมนต์ของโปรแกรม ฉันจะดูสิ่งนี้ได้อย่างไร
jameshfisher

1
OP ถามเกี่ยวกับ OSX -p ไม่ใช่ตัวเลือกสำหรับ netstat เวอร์ชั่น OSX
Ted Bigham

-pใน OSX portเป็น ฉันเกลียดการตัดสินใจที่นักพัฒนาที่จะทำให้ข้อโต้แย้งที่แตกต่างกันสำหรับ OSX และ Linux ...
แดเนียลดับบลิว

0

คำสั่งด้านล่างแสดงการเชื่อมต่อ:

netstat -antop | grep :8080

สำหรับการดูโฟลว์ที่สมบูรณ์แบบเรียลไทม์คุณสามารถใช้watch:

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