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

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

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에서도 나타납니다.

답변1

넌 할 수있어

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 계정으로도 변경되었습니다.

답변2

netstat를 사용하여 열린 소켓을 찾을 수도 있습니다. 다른 포스터에서 제안한 것처럼 lsof를 사용하는 것보다 훨씬 깔끔합니다. 루트로 이 명령줄을 사용해 보세요

netstat -lp -u -t

관련 PID 및 프로그램을 포함하여 모든 청취 연결을 봅니다. -l 매개변수는 청취 연결을 지정하고, -p는 PID/이름을 보려는 것을 지정하고 -t 및 -u는 netstat에 TCP 및 UDP 연결(IPv4 및 IPv6)만 원함을 알립니다.

숫자로 된 포트 및 호스트 이름을 보려면(예: 호스트의 경우 확인되지 않고 포트의 경우 서비스 이름으로 변환되지 않음) -n위의 명령줄에 추가할 수 있습니다.

편집하다:이것은 Linux에서 작동합니다. 주변에 BSD 기반 상자가 없기 때문에 BSD에서 얼마나 잘 작동하는지 모르겠습니다.

답변3

FreeBSD에서는 lsof가 작동하지 않는 경우(예: 어떤 이유로든 /dev/mem이 없는 가상화 시스템에서) 양말 스타트를 사용할 수도 있습니다. IPv4 소켓을 수신하는 모든 프로그램 목록을 얻으려면:

sockstat -l4

답변4

lsof이 소켓을 사용하고 있는 애플리케이션을 찾는 데 사용할 수 있습니다 .

관련 정보