이 네트워크 소켓을 사용하는 것은 무엇입니까?


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 주소가 있음을 나타냅니다. 인터넷에서 해당 컴퓨터를 고유하게 식별합니다. 또한 연결할 수있는 각 IP 주소에는 65,000 개의 번호가 지정된 포트가 있습니다.

웹 서버에 연결하려는 경우 브라우저에서 사이트를 열지 만 실제로는 기계가 웹 서버 IP의 포트 80에 연결되어 있습니다. 웹 서버의 데몬 (포트 80으로의 연결을 청취하는 프로그램)은 "소켓"을 사용하여 해당 포트를 열어두고 자체적으로 예약합니다. 한 번에 하나의 프로그램 만 동일한 포트를 사용할 수 있습니다.

ntpd가 실행 중이므로 해당 포트를 사용하고있었습니다. 'ntpdate'가 해당 포트에 액세스하려고했지만 이미 열려 있기 때문에 '소켓이 이미 사용 중입니다'오류가 발생했습니다.


UDP 계정도 수정했습니다.


1
lsof는 내 세상을 흔든다! 다양한 IP 기반을 찾기 위해 IPv4를 grep하십시오.
geoffc

"이미 알고있는 모든 사람에게 사과"-사과하지 마십시오. 이 사이트의 목적 중 하나는 일반적인 질문에 대한 올바른 답변을 제공하는 것입니다. 이 초기 베타의 목적은 콘텐츠를 제공하는 것입니다.
Stefan Lasiewski 21:06에

알아요.하지만 물어 보는 사람이 내가 그들과 대화하려고하지 않는다는 것을 알고 싶었습니다.
Matt Simmons

나는 그 질문을했다. 그리고 당신은 나에게 말하지 않았다. 나는 또한 그 대답을 알고 있지만 베타에 대한 좋은 질문이라고 생각합니다. 그리고 당신의 대답은 내가 쓰는 것보다 훨씬 낫습니다.)
Stefan Lasiewski

@MattSimmons IsofCentOS 7 에는 명령 이 없습니다 .
3 개 블록

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

@ 스테판 : 내 대답에는 UDP 소켓도 표시됩니다.
kbyrd

@kbyrd : 흥미 롭습니다. 그것은 나를 위해 UDP 패킷을 표시하지 않습니다. 귀하의 게시물에 대한 내 의견을 참조하십시오.
Stefan Lasiewski

2

FreeBSD에서는 lsof가 작동하지 않는 경우 (예를 들어 / dev / mem이없는 가상화 된 시스템에서) sockstat을 사용할 수도 있습니다. 수신 대기중인 IPv4 소켓이있는 모든 프로그램 목록을 얻으려면 다음을 수행하십시오.

sockstat -l4

1

루트 권한으로 다음을 수행하십시오.

lsof | grep IPv4 | grep LISTEN

IPv4 소켓에서 수신 대기중인 모든 프로세스가 표시됩니다. 차단할 수 있는 작업을 수행 -b하지 않도록 추가 할 수 있습니다 lsof. 당신이 경우에 당신은 아마 또한 리디렉션 할 것이라는 점 stderr/dev/null.


나에게 이것은 UDP 패킷을 보여주지 않는 것 같습니다. rsyslogd를 실행하는 Ubuntu 상자에서 포트 514 / udp를 수신 대기 중입니다.
Stefan Lasiewski

sudo lsof |grep UDPUDP 패킷을 보려면 해야 합니다.
Stefan Lasiewski

1

lsof이 소켓을 사용하는 응용 프로그램을 찾는 데 사용할 수 있습니다 .


0

OS X 10.9.5에서이 3 대 1로 놀기 :

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


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.