주어진 포트에서 어떤 프로그램이 청취하고 있는지 아는 방법?


377

프로그램이 8000컴퓨터의 포트 에서 수신 대기중인 것 같습니다 .

다음 명령을 실행하면이 오류가 발생합니다.

> python -m SimpleHTTPServer
# Lots of python error
socket.error: [Errno 98] Address already in use

다른 포트를 사용 8000하면 (기본값) 웹 서버가 제대로 실행됩니다.

wget localhost:8000명령 줄에서 실행 하면을 반환합니다 404 Not Found.

어떤 프로그램이 port 8000에서 수신 대기 중인지 , 그리고 해당 프로그램이 구성된 곳 을 찾기 위해 무엇을 할 수 있습니까?

답변:


314

터미널을 열고 다음과 같이 입력하십시오

lsof -i :8000

해당 명령은 PID와 함께 해당 포트에서 사용하는 응용 프로그램을 나열합니다. ( sudo특정 프로세스에 대한 권한이 없기 때문에 결과가 실행되지 않는 경우 )

예를 들어, 포트 8000 ( python3 -m http.server)의 경우 :

$ lsof -i :8000
COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
python3 3269 user    3u  IPv4 1783216      0t0  TCP *:8000 (LISTEN)

포트 22 (SSH) :

$ sudo lsof -i :22
COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd     998 root    3u  IPv4 1442116      0t0  TCP *:ssh (LISTEN)
sshd     998 root    4u  IPv6 1442118      0t0  TCP *:ssh (LISTEN)

희망이 도움이됩니다.


2
이것은 또한 OSX에서 그 가치가있는 것을 위해 작동합니다 .....
reevesy

2
추가 -s TCP:LISTEN하면 결과가 실제 청취 소켓 및 해당 프로세스로 제한됩니다.
jhermann

1
포트 8000을 검색하면 PID 1889? 와트
CodyBugstein

예, 포트 8881을 사용하는 PID 1889 서비스가 있습니다. 아무것도 빠졌습니까?
rɑːdʒɑ

1
@Imray 예제는 포트 8881을 검색합니다. PID 열에는 프로세스 ID가 포함되고 NAME 열에는 포트가 포함됩니다.
Freek de Bruijn

377

netstat를 사용하여 어떤 프로세스가 어떤 포트에서 수신 대기 중인지 확인할 수 있습니다.

이 명령을 사용하여 자세한 내용을 확인할 수 있습니다.

sudo netstat -peanut

포트 8000에서 수신 대기중인 것을 정확히 알아야하는 경우 다음을 사용할 수 있습니다.

sudo netstat -peanut | grep ":8000 "

netstat에서 숨길 수있는 프로세스가 없습니다.


117
netstat -peanut보다 기억하기 쉽다 netstat -taupen!
Douglas B. Staple

9
좋은 것! -댓글을 반영하기 위해 답변을 수정했습니다. 감사합니다.
앙투안 로드리게스

2
'fuser -k 8000 / tcp'-포트를 비우기
Jay Modi

3
"PID / 프로그램 이름"열에 프로세스 이름 대신 대시가 표시되면 "sudo"를 추가하지 않은 것입니다.
v.shashenko

3
그래서 땅콩 eh
prusswan

172

@ 33833의 답변을 설명하려면 다음과 같은 매우 자세한 정보를 얻을 수 있습니다.

$ lsof -i :8000
COMMAND  PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
squid3  1289 proxy   15u  IPv6 14810490      0t0  TCP *:8000 (LISTEN)

$ ps -fp 1289
UID        PID  PPID  C STIME TTY          TIME CMD
proxy     1289     1  0 09:48 ?        00:00:00 /usr/sbin/squid3 -N -f /etc/squid-deb-proxy/squid-deb-proxy.conf

나는 바로 오징어가 과정이라는 것을 알 수 있지만 실제로 squid-deb-proxy항구를 차지하고있는 것은 내 것입니다.

자바 앱의 또 다른 좋은 예 :

$ lsof -i :4242
COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
java    3075 root   86u  IPv4    12019      0t0  TCP *:4242 (LISTEN)

$ ps -fp 3075
UID        PID  PPID  C STIME TTY          TIME CMD
root      3075     1 15 May24 ?        3-16:07:25 /usr/local/crashplan/jre/bin/java -Dfile.encoding=UTF-8 -Dapp=CrashPlanService -DappBaseName=CrashPl

당신은에서 볼 수있는 lsof것이 도움이 미만 자바이라고 (목록 열기 파일). psPID로 명령을 실행하면 CrashPlan이라는 것을 즉시 알 수 있습니다.


9
한 명령으로 :lsof -t -i :8000 | xargs ps -fp
Brett Y

8
접두사 sudo 를 사용해야했지만 그 후에는 효과가있었습니다. 감사.
Dwayne Crooks

4
참고 : sudo오류가 없으면 간단한 응답으로 아무것도 얻지 못합니다.
Frank Nocke

13

패키지 ss에서 시도하십시오 iproute2:

ss -nlp | grep 8000

5
ss또한 자체 필터링 기능이 ss -nlp '( sport = :8000 )'있습니다.
GnP

6

socklistfrom procinfo패키지를 사용 하는 다른 방법 :

man socklist

DESCRIPTION
socklist은 유형, 포트, inode, uid, pid, fd 및 소켓이 속한 프로그램을 열거하는 모든 열린 소켓 목록을 제공하는 Perl 스크립트입니다.

sudo socklist

type  port      inode     uid    pid   fd  name
tcp     53      28749       0   1721    5  dnsmasq
tcp    631      29190       0   2433   11  cupsd
tcp  42376      82230    1000   1345   84  firefox
tcp  49048      71686    1000   1345   67  firefox
tcp  41248      81672    1000   1345  119  firefox
tcp  54676      84558    1000   1345   73  firefox
udp  56107      66258       0   3268   20  dhclient
udp  40804      17857     107    679   14  avahi-daemon
udp     53      28748       0   1721    4  dnsmasq
udp     68      67427       0   3268    6  dhclient
udp    631      19692       0    765    8  cups-browsed
udp   5353      17855     107    679   12  avahi-daemon

2

nmap을 사용할 수 있습니다.

PC에서 어떤 포트가 열려 있는지 아는 것이 매우 중요합니다. 이것은 Linux뿐만 아니라 다른 운영 체제에서도 유용합니다. 리눅스는 어떤 포트가 열려 있는지 확인하는 많은 도구를 가지고 있습니다. 가장 일반적인 것은 nmap입니다. 명령 행 도구를 사용하지만 원하는 경우 그래픽 프론트 엔드도 있습니다. 1

설치하려면 키보드에서 Ctrl+ Alt+ T를 눌러 터미널을 엽니 다. 열리면 아래 명령을 실행하십시오.

sudo apt-get install nmap

nmap 및 기타 유틸리티에 대한 자세한 내용은 여기를 참조하십시오.

1 출처 : garron.me


nmap은 어떤 프로세스가 포트를 열지 않고 포트가 열려 있음을 알려줍니다.
Andrew Burns

1
[nmap] tries to guess which service is listening on each port, but it can make mistakes소켓을 소유 한 프로세스를 찾는 실제 방법을 제안하기 직전에 소스를 클릭하여 읽었 습니다.
GnP

@gnp 또한 한 번 봐 걸릴 수도 있습니다 이를 .
Mitch

@ 미치 내가 했어. OP는 로컬 시스템에서 프로세스의 정확한 PID를 알아야합니다. Nmap은 서비스 및 버전 감지조차도 올바른 도구가 아닙니다. 어느 여전히 어떤 프로세스를 종료하거나 다시 구성하거나하지 않습니다과 영업 이익이 좋은 지문과 insecure.org에 대한 링크가 뜻하는대로 어둠에 영업을 할 수 nmaps 데이터베이스의 항목과 일치합니다
한나라당
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.