네트워크 포트가 열려 있지만 프로세스가 연결되어 있지 않습니까? PID/Program

열린 네트워크 포트에서 이상한 상황이 발생합니다. 내 주요 질문은 열린 TCP 포트와 관련된 프로그램이없는 이유입니다.

netstat -ln --program
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:5666                0.0.0.0:*                   LISTEN      -

필자의 경우 5666 포트에서 수신 대기하는 nrpe 데몬 (opsview 설치)이 있어야하지만 nrpe 데몬은 실행되고 있지 않습니다. 시작하려고하면 즉시 종료됩니다.

lsof -i :5666출력도 표시하지 않습니다. 내 시스템에서 (x) inetd가 실행되고 있지 않습니다.

최신 정보

예, 해당 명령을 루트로 실행했습니다. 텔넷은 가능했지만 응답이 없었습니다.

추가 조사 후 커널 오류가 발견되었습니다 dmesg. 이것은 이전 커널을 실행하는 EC2 인스턴스 (실제로는 그중 몇 개)였습니다 (2.6.16은 불안정합니다). 충돌을 막기위한 해결책은 커널업그레이드하는 것이 었습니다 .

커널 충돌로 인해 프로세스가 중단되고 포트가 열린 상태 인 것처럼 보입니다.



답변

커널에 의해 열린 포트는 프로그램 이름과 함께 나타나지 않습니다. 일부 NFS 및 OCFS 항목이 떠 오릅니다. 어쩌면 그런 식일까요?

아니면 커널 버그 일 수 있습니다. 커널 로그에서 OOPS 및 BUG를 확인하십시오.


답변

netstat 및 lsof를 루트 또는 sudo로 실행 했습니까? 마지막 열에 주목하십시오 :

netstat -ln --program
tcp        0      0 192.168.21.1:53         0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -

sudo netstat -ln --program
tcp        0      0 192.168.21.1:53         0.0.0.0:*               LISTEN      2566/named
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      2566/named
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3125/sshd

netstat 맨 페이지에서 :

소유하지 않은 소켓에서이 정보를 보려면 수퍼 유저 권한이 필요합니다.

달리고 있지 않다는 것을 어떻게 알 수 있습니까? 포트가 사용 중이면 ‘사용중인 소켓’오류와 함께 즉시 종료됩니다. 포트에 텔넷 연결하면 어떻게됩니까?

telnet localhost 5666

답변

‘netstat –tcp –udp –listening –program’을 루트 사용자로 실행하십시오 . 그렇지 않으면 PID / 프로그램 이름을 제공하지 않습니다

그런 다음 kill -9 PID 명령을 사용하십시오.


답변

나는 실제로 다음과 같은 질문에 답할 수 있도록 작은 쉘 스크립트를 작성했습니다.

#! /bin/bash
([ "$1" = "" ] || [ "$2" = "" ]) && echo "Usage: tracer <space> <port>" && exit 0
for i in `fuser -n $1 $2`
 do
  ps aux | grep $i | grep -v 'grep'
 done

/ usr / local / bin / tracer로 저장하십시오. 산출:

root@mo-log:/usr/flows# tracer tcp 80
80/tcp:
root     27904  0.0  0.0 111668  3292 ?        Ss   Aug04   0:03 /usr/sbin/apache2 -k start
www-data 32324  0.0  0.0 335332  3560 ?        Sl   Aug05   0:00 /usr/sbin/apache2 -k start
www-data 32327  0.0  0.0 335324  3560 ?        Sl   Aug05   0:00 /usr/sbin/apache2 -k start

사용하려면 루트 권한이 필요합니다


답변

netstat를 통해 inode를 가져온 다음 lsof와 함께 inode를 사용하여 프로세스를 추적 할 수있었습니다. /server//a/847910/94376 에서 더 자세한 답변을 참조하십시오 .


답변

때때로 nfs 관련 프로그램이 프로그램 목록에 표시되지 않을 수 있습니다.

또한 LDAP pam 모듈 및 libnss_ldap는 ldap 서버에 대한 연결을 열지 만 연결을 연 상태로 유지하는 실제 프로세스는 없으므로 netstat -tnp는 프로세스없이 활성 연결을 표시합니다.