Điều gì đang sử dụng ổ cắm mạng này?


18

Tôi đang cố gắng sử dụng NTP để cập nhật thời gian trên máy của mình. Tuy nhiên, nó cho tôi một lỗi:

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

Lỗi "socket đang sử dụng" nghĩa là gì? Làm thế nào tôi có thể thấy những gì đang sử dụng ổ cắm này?

Điều này xảy ra trên hệ thống CentOS 4.x của tôi, nhưng tôi cũng thấy nó trên FreeBSD 7.x, Ubuntu 10.04 và Solaris 10.


Câu trả lời:


20

Bạn có thể làm

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

để xem tất cả các cổng nghe của bạn, nhưng đô la cho bánh rán mà ntpd đang chạy:

service ntpd status

Và đối với "Ổ cắm đang sử dụng" nghĩa là gì? Nếu tôi có thể được tha thứ cho việc làm mịn một số nếp nhăn (và đối với lời giải thích rất cơ bản, lời xin lỗi của hầu hết điều này là khắc phục cho bạn) ... TCP / IP (ngôn ngữ của internet) chỉ định rằng mỗi máy tính có một địa chỉ IP, mà xác định duy nhất máy tính đó trên internet. Ngoài ra, có 65.000 cổng được đánh số trên mỗi địa chỉ IP có thể được kết nối.

Khi bạn muốn kết nối với máy chủ web, bạn mở trang web trong trình duyệt của mình, nhưng máy móc bên dưới thực sự đang kết nối bạn với cổng 80 trên IP của máy chủ web. Trình nền của máy chủ web (chương trình lắng nghe các kết nối đến cổng 80) sử dụng "ổ cắm" để giữ cổng đó mở, bảo lưu nó cho chính nó. Mỗi lần chỉ có một chương trình có thể sử dụng cùng một cổng.

Vì bạn đã chạy ntpd, nên nó đã sử dụng cổng đó. 'ntpdate' đã cố gắng truy cập vào cổng đó, nhưng vì nó đã được mở, bạn đã gặp lỗi 'socket đã được sử dụng'.

Chỉnh sửa cũng đã
thay đổi thành tài khoản cho UDP


1
lsof đá thế giới của tôi! grep trên IPv4 cũng như để tìm những thứ dựa trên IP khác nhau.
geoffc

"Xin lỗi tất cả những người đã biết điều này" - Đừng xin lỗi. Một mục đích của trang web này là cung cấp câu trả lời tốt cho các câu hỏi phổ biến. Mục đích của phiên bản beta đầu tiên này là cung cấp nội dung.
Stefan Lasiewski

Tôi biết, nhưng tôi muốn chắc chắn rằng người hỏi đã biết tôi không cố nói chuyện với họ.
Matt Simmons

Tôi đã hỏi câu hỏi và bạn không nói chuyện với tôi. Tôi cũng biết câu trả lời, nhưng tôi nghĩ đó là một câu hỏi hay cho bản beta. Và câu trả lời của bạn tốt hơn nhiều so với bất cứ điều gì tôi sẽ viết;)
Stefan Lasiewski

@MattSimmons không có Isoflệnh nào trong CentOS 7. của tôi
ba khối

10

Bạn cũng có thể sử dụng netstat để tìm kiếm các ổ cắm mở - nó sạch hơn nhiều so với sử dụng lsof như các áp phích khác đã đề xuất. Hãy thử dòng lệnh này với quyền root

netstat -lp -u -t

để xem tất cả các kết nối nghe, bao gồm các chương trình và pid liên quan của chúng. Tham số -l là thông số chỉ định các kết nối nghe, -p chỉ định rằng bạn muốn xem PID / name và -t và -u nói với netstat rằng bạn chỉ muốn kết nối TCP và UDP (IPv4 và IPv6).

Nếu bạn muốn xem tên cổng và tên máy chủ (nghĩa là không được giải quyết trong trường hợp máy chủ và không được chuyển đổi thành tên dịch vụ trong trường hợp cổng), bạn có thể thêm -nvào dòng lệnh ở trên.

EDIT: Điều này hoạt động trên Linux - Tôi không biết nó hoạt động tốt như thế nào trên BSD, vì tôi không có bất kỳ hộp dựa trên BSD nào.


+1: Đây là câu trả lời duy nhất thực sự hiển thị quá trình ntpd (nghe theo UDP theo mặc định).
Stefan Lasiewski

Đối với con người: Cờ của bạn tương đương vớinetstat --listen --programs --udp --tcp
Stefan Lasiewski

1
FreeBSD không hỗ trợ '-p' ("Hiển thị chương trình"), đó là lý do tại sao mọi người sử dụng LSOF. Nó cũng không hỗ trợ cờ -l ("Hiển thị ổ cắm nghe"), nhưng tôi nghĩ bạn có thể làm điều đó với | grep LISTEN, nhưng loại trừ các kết nối UDP. Nhưng mặt khác, tôi nghĩ các cờ tương đương trên FreeBSD là : netstat -p udp -p tcp -a, nhưng netstat -acó thể đơn giản hơn.
Stefan Lasiewski

@Stefan: Câu trả lời của tôi cũng sẽ hiển thị ổ cắm UDP.
kbyrd

@kbyrd: Thú vị. Nó không hiển thị các gói UDP cho tôi. Xem bình luận của tôi để bài viết của bạn.
Stefan Lasiewski

2

Trên FreeBSD, bạn cũng có thể sử dụng sockstat trong trường hợp lsof không hoạt động cho bạn (ví dụ: trên các hệ thống ảo hóa không có / dev / mem vì bất kỳ lý do gì). Để có danh sách tất cả các chương trình có ổ cắm nghe IPv4:

sockstat -l4

1

Là root, làm điều này:

lsof | grep IPv4 | grep LISTEN

Điều này sẽ cho bạn thấy tất cả các quy trình đang nghe trên ổ cắm IPv4. Bạn có thể muốn thêm -bđể ngăn chặn lsofthực hiện một số điều có thể chặn nó. Nếu bạn làm điều đó có lẽ bạn cũng muốn chuyển hướng stderrđến /dev/null.


Đối với tôi, điều này dường như không hiển thị các gói udp. Tôi đang thử nghiệm trên một hộp Ubuntu đang chạy rsyslogd, nghe trên cổng 514 / udp.
Stefan Lasiewski

Tôi cần phải làm gì sudo lsof |grep UDPđể xem các gói UDP.
Stefan Lasiewski

1

Bạn có thể sử dụng lsofđể tìm ứng dụng nào đang sử dụng ổ cắm này.


0

Chơi với ba trong một này trên OS X 10.9.5:

sudo lsof | grep \ IPv | sort ; clear ; sudo lsof -U ; clear ; sudo netstat -a


0

Với FreeBSD, hãy sử dụng công -utắc để ntpdatesử dụng cổng không được ưu tiên thay thế.

Như: ntpdate -v -b -u 0.freebsd.pool.ntp.org

Sử dụng man ntpdateđể xem những gì -v-blàm.


Ntpdate trên Debian có -utùy chọn, vì nó từ ntp.org, tôi tưởng tượng hầu hết các hệ thống đều có nó.
RobertL
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.