netstat -ntap에 일부 연결의 pid / 프로세스 이름이 표시되지 않습니까?


11

커널 2.6.24-23-server 및 netstat와 함께 우분투 / 하디 서버가 있습니다.

# netstat --version
net-tools 1.60
netstat 1.42 (2001-04-15)

문제는 netstat -ntap출력에 PID 또는 프로그램 이름을 표시하지 않는 많은 ESTABLISHED 연결이 있다는 것 입니다. Netstat는 루트에서 호출되었으며 chroot, grsecurity 또는 이와 유사한 것은 없습니다 (또는 그렇게 들었습니다).

무엇이 잘못되었을 지에 대한 아이디어가 있습니까?

최신 정보

lsof -n -i 제대로 작동하고 연결에 대한 pid / 프로세스 이름을 표시합니다.


2
루트 또는 sudo로 실행 하시겠습니까?
Dom

예, 루트에서, 심지어 sudo를 통해 루트에서 실행되었습니다. 같은 효과.

당신은 netstat -ntap대신에 하지 않았 netstat ntap습니까?
Kyle Brandt

내가 netstat -ntap썼던 것처럼 내가 하고있는 것이 확실하다 . 이것은 man 페이지에 따라 netstat에 옵션이 제공되는 방식입니다.

참고 사항-방금 확인했는데 netstat가 "-"없이 주어진 옵션을 인식하지 못하는 것 같습니다.

답변:


4

이는 NFS와 같은 커널 프로세스에서 발생하지만 일반 앱에서도 발생합니다. RHEL 5의 동작은 동일합니다.

# netstat -taupen | grep 30715
tcp        0      0 0.0.0.0:30715           0.0.0.0:*               LISTEN      66558      81467710   - 

반면에 lsof는 다음과 같이 적절하게 단어를 작성합니다.

# lsof -i:30715
AppName 1598 useracct   78u     IPv4           81467710                   TCP *:30715 (LISTEN)

4
198_141:~ # netstat  -anp|grep 33000
tcp        0      0 0.0.0.0:53000           0.0.0.0:*               LISTEN       -                   
198_141:~ # lsof -i:33000
COMMAND   PID USER   FD   TYPE     DEVICE SIZE NODE NAME
vsftpd  28147 root    3u  IPv4 4089990174       TCP *:33000 (LISTEN)
198_141:~ # id
uid=0(root) gid=100(users) groups=16(dialout),100(users)
198_141:~ # 

내 양파에는 두 가지 상황이있을 수 있습니다.

1) 일반 권한 사용자 excute "netstat"는 루트에 의해 시작된 프로세스를 볼 수 없습니다

2) 일부 프로세스는 커널에서 실행


1

설정된 연결의 경우 이는 NFS 또는 DRBD와 같은 커널 공간에서 시작된 연결에 대해서만 발생합니다. 분명히 기다리는 연결은 프로세스가 그 아래에서 죽었을 수 있습니다. 주어진 연결을 일으키는 원인을 해결할 수 없으면 출력을 붙여 넣으면 누군가가 그 결과를 말할 수 있습니다.


이들은 응용 프로그램에서 데이터베이스에 대한 연결이므로 커널 기반 연결이 아닙니다.

netstat -atnp | grep EST?
womble

이것은 내 문제입니다-연결은 pid / 프로그램 이름 대신에 나열됩니다. "-"가 있습니다

3
그리고 나는 그 해석이 아닌 실제로 일어나는 일 을보고 싶습니다 .
womble

환경을 식별하는 데 사용할 수있는 이름이 포함되어 있으므로 전체 출력을 표시 할 수 없습니다. 이 특정 포트의 라인은 다음과 같습니다 : "tcp 0 0 localhost : 36949 localhost : 6543 ESTABLISHED-"

1

나는 같은 행동을 가지고 있으며 내 생각에는 netstat 행동이 변경되었을 수 있습니다. 예를 들어, 'wget'에 대한 포트와 프로그램을 볼 수 있지만 Apache PHP 프로세스는 더 중요하지 않습니다.

해결 방법 : lsof를 대신 사용하도록 스크립트를 다시 작성했습니다 (위 힌트 참조).


파스칼 :이 명령을 sudo 또는 root로 실행 했습니까?
Stefan Lasiewski 2016 년

0

요즘 나는 우분투 18.04 LTS (netstat는 동일한 버전 netstat 1.42 (2001-04-15))에서 같은 질문을 겪었으므로 8 년 후에도 여전히 대답이 없기 때문에 여기에 도착하십시오. net-tools의 소스 코드를 탐색 한 후 찾을 수 있습니다.

netstat 소스 코드에서 :

  1. / proc의 모든 프로세스 폴더는 반복되며 / proc // fd 디렉토리의 각 fd는 소켓 inode에서 pid / progname으로의 맵을 빌드하기 위해 검사됩니다.

  2. 그런 다음 / proc / net / tcp를 검사하여 소켓 inode를 포함하여 tcp 소켓 정보 (tcp_info 함수에 의해)를 가져옵니다.

  3. tcp 소켓 정보를 출력 할 때, pid / progname은 1 단계의 맵에서 소켓 inode를 통해 조회됩니다. 아무것도 발견되지 않으면 '-'가 출력됩니다.

맵이 작성된 후 소켓이 작성되면 맵에서 pid / progname을 찾을 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.