답변:
"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 / 이름
시험
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)
netstat -tlnp
표시 t
되는 CP 포트 l
istening가 보여 n
엄버 만 (하지 해결의 이름을 -이 빨랐다한다) 및 쇼 p
청취를하고있다 로웠을합니다 ( p
루트 경우에만 작동)
netstat -ulnp
표시 u
되는 포트 (DP) l
istening, 쇼 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
호스트 / 인터페이스에 대해 로컬 또는 원격 소켓이 있는지 (로컬) 또는 연결된 (로컬 또는 원격) 소켓이 있는지 확인
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에 연결합니다. 그런 다음 클라이언트쪽에 입력을 입력하면 서버에 표시됩니다. 그렇지 않은 경우 시스템 및 네트워크 별 도구를 조사해야합니다.
이 하나의 라이너는 사용중인 모든 TCP 포트 목록을 제공합니다. Ubuntu 및 OS X의 bash에서 작동합니다.
netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq
목록에는 추가 정보없이 한 줄에 하나의 포트가 있습니다.
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
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
지금까지는 꽤 잘 작동하고 있습니다.