Ubuntu 8.04에서 포트를 사용할 수 있는지 어떻게 알 수 있습니까?


28

포트가 이미 열려 있는지 여부를 알려주는 bash에서 실행할 수있는 명령이 있습니까?

답변:


37

"netstat"를 사용하여 현재 사용중인 포트를 확인하십시오.

netstat -antp

프로토 Recv-Q Send-Q 로컬 주소 외부 주소 상태 PID / 프로그램 이름
tcp 0 xxx.xxx.xxx.xxx 0.0.0.0:* LISTEN 16297 / 이름     
tcp 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LISTEN 16297 / 이름     
tcp 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LISTEN 16297 / 이름     
tcp 00 127.0.0.1:53 0.0.0.0:* 듣기 16297 / 이름     

2
"netstat -antp | grep 80"여기서 80은 검색 할 포트 번호입니다.
Umair A.

13

이 (netstat)는 가장 빠른 솔루션입니다 ...

netstat -lnt

... 그러나 이것은 당신에게 더 많은 통제력을 제공합니다 (속도 비용 (때로는 많은 속도)) ...

lsof -n -i -a -u www-data

위의 예 는 Apache ( ) 사용자 에게 속한 모든 TCP 포트가 열려 있고 LISTEN상태 인 AND ( -a) 를 보여줍니다 www-data.


8

모든 좋은 답변.

그러나 해당 컴퓨터에 로그온했는지 언급하지 않습니다. ;피

그렇지 않은 경우 nmap 은 친구입니다.

초보자를 위해 :

nmap -Otarget

amap 은 배너 페이지를 잡아서 서버 소프트웨어를 추측하려고 시도하는 좋은 선택입니다.

초보자를 위해 :

amaptarget1-6000


7

시험

lsof -i :<port number>

결과가 나오면 무언가가 듣고 묶는 것입니다. 예 :

# lsof -i :80
COMMAND   PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
nginx    1833 nobody    3u  IPv4 51091229      0t0  TCP odessa.cheney.net:http->79.173.188.214:52918 (ESTABLISHED)
nginx    1833 nobody    5u  IPv4 46221856      0t0  TCP odessa.cheney.net:http->66.36.243.182:37876 (CLOSE_WAIT)
nginx    1833 nobody    9u  IPv4 34733048      0t0  TCP localhost.localdomain:http (LISTEN)
nginx    1833 nobody   10u  IPv4 34733049      0t0  TCP odessa.cheney.net:http (LISTEN)
nginx    1833 nobody   14u  IPv4 46221857      0t0  TCP odessa.cheney.net:http->66.36.243.182:37880 (CLOSE_WAIT)
nginx    1833 nobody   15u  IPv4 51091030      0t0  TCP odessa.cheney.net:http->msnbot-65-55-106-132.search.msn.com:51708 (ESTABLISHED)
nginx   11832   root    9u  IPv4 34733048      0t0  TCP localhost.localdomain:http (LISTEN)
nginx   11832   root   10u  IPv4 34733049      0t0  TCP odessa.cheney.net:http (LISTEN)

4
netstat -tlnp  

표시 t되는 CP 포트 listening가 보여 n엄버 만 (하지 해결의 이름을 -이 빨랐다한다) 및 쇼 p청취를하고있다 로웠을합니다 ( p루트 경우에만 작동)

netstat -ulnp  

표시 u되는 포트 (DP) listening, 쇼 n에만 엄버 (하지 해결의 이름을 -이 빨랐다한다) 및 쇼 p청취를하고있다 로웠을합니다 ( p루트 경우에만 작동)

netstat -unp  

보기 u열려있는 포트하지만 안 듣고, 쇼 DP n전용 (names-가 해결되지 않는 것은 그것이 더 빨랐다 수) 엄버와 쇼 p청취를하고있다 로웠을합니다 ( p루트 경우에만 작동)

netstat -an

표시 a사용 LL 포트, 쇼 n엄버 전용 - 이름을 확인하지 않습니다

lsof -i <proto>@<host>:<port>

예 :

lsof -i tcp@localhost:25

localhost 25 / TCP 포트에서 수신 대기중인 것이 있는지 확인하거나

lsof -i tcp@0.0.0.0:636 

호스트 / 인터페이스에 대해 로컬 또는 원격 소켓이 있는지 (로컬) 또는 연결된 (로컬 또는 원격) 소켓이 있는지 확인


2

lsof (열린 파일 목록)는 프로세스가 포트에서 수신 대기 중인지 확인하는 좋은 도구입니다.

lsof -P | grep : <포트 번호>

netstat는 활성 연결이 있는지 확인하기위한 좋은 도구입니다.

netstat -n | grep : <포트 번호>


2

TCP 또는 UDP와 같이 사용하려는 프로토콜에 대해서는 언급하지 않았으며 "포트"는 시스템이 소켓을 명확하게하기 위해 지원하는 것만 큼 세분화되어 있지 않다는 것을 인식해야합니다. 예를 들어 시스템에 여러 개의 IP 주소가있는 경우 포트 80이 모든 IP 주소에서 사용 중이거나 (응용 프로그램이 "0.0.0.0"또는 "::"또는 각 IP 주소에 연속적으로 바인딩되어 있음) 또는 해당 IP 주소의 하위 집합에만 사용하십시오.

포트 / 주소가 사용 가능하고 사용 가능한지 판별하는 가장 좋고 확실한 방법은 해당 포트 / 주소를 바인딩하는 것입니다. Netcat이 유용합니다.

nc -l [-s abcd] -p NN

TCP 포트 NN에 바인드를 시도합니다 (옵션, 기본값은 모든 주소입니다) abcd UDP에서 동일하게 수행하려면 -u 옵션을 추가하십시오.

다음으로, 포트가 원하는대로 "열렸는지"알기 위해서는 잠재적 인 방화벽 규칙을 살펴 봐야합니다. 가장 쉬운 방법은 포트에 연결을 시도하는 것입니다. 서버에서 위와 같이 netcat을 사용하고 클라이언트에서 netcat을 사용하여 연 포트에 연결을 시도하십시오.

nc [-u] abcd NN

-u 플래그가 지정된 경우 UDP를 사용하여 abcd의 포트 NN에 연결합니다. 그런 다음 클라이언트쪽에 입력을 입력하면 서버에 표시됩니다. 그렇지 않은 경우 시스템 및 네트워크 별 도구를 조사해야합니다.


2

psmisc 패키지에 퓨저를 사용합니다 .

퓨저 -n tcp 포트

프로세스 의 pid 를이 포트에 바인드합니다.

이것이 포트가 듣고 있는지 알기 위해 좋은 오래된 텔넷 이 트릭을 수행합니다. :)

텔넷 127.0.0.1 포트


2

이 하나의 라이너는 사용중인 모든 TCP 포트 목록을 제공합니다. Ubuntu 및 OS X의 bash에서 작동합니다.

netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq

목록에는 추가 정보없이 한 줄에 하나의 포트가 있습니다.


그것을 사랑하십시오! bash는 스크립트에서 gret 드롭, 예를 들면 :for port in $(netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq); do echo EXECUTE COMMAND FOR PORT $port; done
그르 Wierzowiecki

0

Linux와 osx에서 작동하지 않았거나 docker가 사용하는 포트 또는 루트가 소유 한 프로세스를 표시하지 않았기 때문에 많은 방법으로 문제가 발생했습니다. 이제이 자바 스크립트 프로그램을 사용합니다.

(노드가 설치되어 있고 노드가 작동 node하지 nodejs않거나 그에 따라 프로그램을 변경 하는지 확인하십시오 )

check-port경로 또는 프로젝트에서 호출 된 파일에 다음을 저장하십시오.

#!/usr/bin/env node
var http = require('http');
var app = new http.Server();
app.listen(process.argv[2], () => {
  process.exit(0)
});

권한 설정

chmod +x path/to/check-port

당신의 길에서 도망

check-port 8080

또는 같은 디렉토리에서 실행

./check-port 8080

지금까지는 꽤 잘 작동하고 있습니다.

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