การใช้ซ็อกเก็ตเครือข่ายนี้คืออะไร


18

ฉันพยายามใช้ NTP เพื่ออัปเดตเวลาบนเครื่องของฉัน อย่างไรก็ตามมันทำให้ฉันมีข้อผิดพลาด:

host # ntpdate ntp1.example.org
10 Aug 12:38:50 ntpdate[7696]: the NTP socket is in use, exiting

ข้อผิดพลาด "ซ็อกเก็ตใช้งานอยู่" หมายถึงอะไร ฉันจะดูสิ่งที่ใช้ซ็อกเก็ตนี้ได้อย่างไร

สิ่งนี้เกิดขึ้นในระบบ CentOS 4.x ของฉัน แต่ฉันเห็นบน FreeBSD 7.x, Ubuntu 10.04 และ Solaris 10


คำตอบ:


20

คุณทำได้

lsof -n | grep -i "TCP\|UDP" | grep -v "ESTABLISHED\|CLOSE_WAIT"

เพื่อดูพอร์ตการฟังทั้งหมดของคุณ แต่ดอลลาร์เพื่อโดนัทที่ ntpd กำลังทำงานอยู่:

service ntpd status

และสำหรับ "ซ็อกเก็ตที่ใช้งานอยู่" หมายถึงอะไร หากฉันสามารถให้อภัยสำหรับการทำให้เรียบกว่าริ้วรอยบางอย่าง (และสำหรับคำอธิบายพื้นฐานมากขอโทษที่สุดของการแก้ไขสำหรับคุณ) ... TCP / IP (ภาษาของอินเทอร์เน็ต) ระบุว่าคอมพิวเตอร์แต่ละเครื่องมีที่อยู่ IP ซึ่งระบุคอมพิวเตอร์นั้นบนอินเทอร์เน็ตโดยเฉพาะ นอกจากนี้ยังมีหมายเลขพอร์ต 65,000 พอร์ตในแต่ละที่อยู่ IP ที่สามารถเชื่อมต่อได้

เมื่อคุณต้องการเชื่อมต่อกับเว็บเซิร์ฟเวอร์คุณเปิดไซต์ในเบราว์เซอร์ของคุณ แต่เครื่องจักรที่อยู่ด้านล่างเชื่อมต่อคุณเข้ากับพอร์ต 80 บน IP ของเว็บเซิร์ฟเวอร์ daemon ของเว็บเซิร์ฟเวอร์ (โปรแกรมที่รับฟังการเชื่อมต่อกับพอร์ต 80) ใช้ "ซ็อกเก็ต" เพื่อพักเปิดพอร์ตนั้นสำรองไว้สำหรับตัวเอง โปรแกรมเดียวเท่านั้นสามารถใช้พอร์ตเดียวกันในแต่ละครั้ง

เนื่องจากคุณใช้ ntpd อยู่มันกำลังใช้พอร์ตนั้น 'ntpdate' พยายามเข้าถึงพอร์ตนั้น แต่เนื่องจากมันถูกเปิดไว้คุณจึงได้รับข้อผิดพลาด 'ซ็อกเก็ตที่ใช้งานแล้ว'

แก้ไข
เปลี่ยนเป็นบัญชีสำหรับ UDP เช่นกัน


1
lsof เขย่าโลกของฉัน! grep บน IPv4 เช่นกันเพื่อค้นหาสิ่งต่าง ๆ ตาม IP
geoffc

"ขอโทษทุกคนที่รู้เรื่องนี้แล้ว" - อย่าขอโทษ วัตถุประสงค์หนึ่งของเว็บไซต์นี้คือการให้คำตอบที่ดีสำหรับคำถามทั่วไป จุดประสงค์ของเบต้าแรกนี้คือเพื่อให้เนื้อหา
Stefan Lasiewski

ฉันรู้ แต่ฉันต้องการให้แน่ใจว่าคนที่ถามมารู้ว่าฉันไม่ได้พยายามพูดคุยกับพวกเขา
แมตต์ซิมมอนส์

ฉันถามคำถามและคุณไม่ได้พูดกับฉัน ฉันรู้คำตอบด้วย แต่ฉันคิดว่ามันเป็นคำถามที่ดีสำหรับเบต้า และคำตอบของคุณเป็นอะไรที่ดีมากผมจะเขียนแล้ว;)
สเตฟาน Lasiewski

@MattSimmons ไม่มีIsofคำสั่งใน CentOS ของฉัน 7
สามบล็อก

10

นอกจากนี้คุณยังสามารถใช้ netstat เพื่อค้นหาซ็อกเก็ตแบบเปิด - มันสะอาดกว่าการใช้ lsof ตามที่คนอื่นแนะนำ ลองบรรทัดคำสั่งนี้เป็นรูท

netstat -lp -u -t

เพื่อดูการเชื่อมต่อการฟังทั้งหมดรวมถึง pid ที่เกี่ยวข้องและโปรแกรม พารามิเตอร์ -l คือสิ่งที่ระบุการเชื่อมต่อการฟัง -p ระบุว่าคุณต้องการเห็น PID / ชื่อและ -t และ -u บอก netstat ว่าคุณต้องการการเชื่อมต่อ TCP และ UDP (IPv4 และ IPv6) เท่านั้น

หากคุณต้องการเห็นพอร์ตตัวเลขและชื่อโฮสต์ (เช่น. ไม่ได้รับการแก้ไขในกรณีของโฮสต์และไม่เปลี่ยนเป็นชื่อบริการในกรณีของพอร์ต) คุณสามารถเพิ่มลง-nในบรรทัดคำสั่งด้านบน

แก้ไข:สิ่งนี้ใช้ได้กับ Linux - ฉันไม่รู้ว่ามันทำงานได้ดีบน BSD อย่างไรเนื่องจากฉันไม่มีกล่องที่ใช้ BSD


+1: นี่เป็นคำตอบเดียวซึ่งจริง ๆ แล้วแสดงกระบวนการ ntpd (ซึ่งฟัง UDP โดยค่าเริ่มต้น)
Stefan Lasiewski

สำหรับมนุษย์: ธงของคุณเทียบเท่ากับnetstat --listen --programs --udp --tcp
Stefan Lasiewski

1
FreeBSD ไม่รองรับ '-p' ("Show Programs") ซึ่งเป็นเหตุผลที่ผู้คนใช้ LSOF นอกจากนี้ยังไม่สนับสนุนแฟล็ก -l ("Show Listening Sockets") แต่ฉันคิดว่าคุณสามารถทำได้ด้วย| grep LISTENแต่ไม่รวมการเชื่อมต่อ UDP แต่อย่างอื่นฉันคิดว่าค่าสถานะที่เทียบเท่าใน FreeBSD คือ: netstat -p udp -p tcp -aแต่netstat -aอาจจะง่ายกว่า
Stefan Lasiewski

@Stefan: คำตอบของฉันจะแสดงซ็อกเก็ต UDP เช่นกัน
kbyrd

@kbyrd: น่าสนใจ ไม่แสดงแพ็กเก็ต UDP ให้ฉัน ดูความคิดเห็นของฉันในโพสต์ของคุณ
Stefan Lasiewski

2

บน FreeBSD คุณสามารถใช้ sockstat ในกรณีที่ lsof ไม่ทำงานสำหรับคุณ (เช่นในระบบเสมือนที่ไม่มี / dev / mem ด้วยเหตุผลใดก็ตาม) ในการรับรายการโปรแกรมทั้งหมดที่มีการรับฟังซ็อกเก็ต IPv4:

sockstat -l4

1

ในฐานะที่เป็น root ให้ทำสิ่งนี้:

lsof | grep IPv4 | grep LISTEN

นี่จะแสดงกระบวนการทั้งหมดที่กำลังรับฟังกับซ็อกเก็ต IPv4 คุณอาจต้องการเพิ่ม-bเพื่อป้องกันไม่ให้lsofทำบางสิ่งที่อาจปิดกั้น ถ้าคุณทำเช่นนั้นคุณอาจจะยังต้องการที่จะเปลี่ยนเส้นทางไปยังstderr/dev/null


สำหรับฉันดูเหมือนจะไม่แสดงแพ็กเก็ต udp ฉันกำลังทดสอบบนกล่อง Ubuntu ซึ่งกำลังเรียกใช้ rsyslogd กำลังฟังพอร์ต 514 / udp
Stefan Lasiewski

ฉันต้องทำsudo lsof |grep UDPเพื่อดูแพ็กเก็ต UDP
Stefan Lasiewski



0

ด้วย FreeBSD ให้ใช้-uสวิตช์เพื่อntpdateใช้พอร์ตที่ไม่มีสิทธิแทน

ชอบ: ntpdate -v -b -u 0.freebsd.pool.ntp.org

ใช้man ntpdateเพื่อดูว่าอะไร-vและ-bทำอะไร


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