응용 프로그램에서 사용하는 포트 [duplicate]


11

이 질문에는 이미 답변이 있습니다.

자신의 포트 (이러한 포트에 대한 서버 역할을하므로 해당 포트에서 수신 대기)를 여는 응용 프로그램과 동일한 응용 프로그램이 다른 응용 프로그램 (이러한 포트의 클라이언트 역할을 수행하는 포트)에 연결하는 응용 프로그램을 테스트하고 있습니다.

응용 프로그램이 어떤 포트를 만들고 응용 프로그램과 포트를 연결하는지에 대한 개요를보고 싶습니다.

어떻게해야합니까?

답변:


17

당신이 사용할 수있는 netstat 이것 때문에. 예제를 보았다. ssh ) :

netstat -putan | grep ssh
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1725/sshd
tcp        0      0 1.2.3.4:45734           1.2.3.5:22              ESTABLISHED 2491/ssh
tcp6       0      0 :::22                   :::*                    LISTEN      1725/sshd

설명:

나는 종종 매개 변수를 사용한다. -putan (그들은 기억하기 쉽기 때문에).

  • -p: 응용 프로그램 / 프로세스의 PID 표시
  • -u: udp 포트 / 연결 표시
  • -t: tcp 포트 / 연결 표시
  • -a: 수신 대기 소켓과 수신 대기 소켓을 모두 표시합니다.
  • -n: 숫자 출력 (호스트 이름에 대한 DNS 조회 등을하지 않음)

위의 출력에서 ​​ssh 데몬 프로세스가 있음을 알 수 있습니다 ( sshd )와 PID 1725 항구에서 듣기 22 모든 네트워크 인터페이스에서 ( 0.0.0.0 ). 또한 ssh 클라이언트 프로세스 (PID 2491 IP 주소에 연결된 1.2.3.5 포트 번호에서 22, 내 IP 주소는 1.2.3.4 내 외부 포트는 45734. 연결이 설정되었음을 알 수 있습니다. 따라서 다음을 통해 로그인했습니다. ssh.


포트 22에서 설정된 TCP 연결이 인증 성공을 나타내지는 않습니다. 어느 방향 으로든 인증이 이루어지기 전에 TCP를 설정해야합니다.
Puddingfox

@Puddingfox 예 사실, 우리는 더 나은 "나는 그 항구에 연결되어있다"라고 말할 수는 있지만 이해하기 쉽기 때문에 나는 "로그인"이라고 말했습니다.
chaos

1
hehe ... `-putan ' 나는이 사소한 철자 오류를 바로 잡기 위해 유혹을 받는다.)
James Mertz

최신 유틸리티를 사용할 수있을 때 쓸모없는 유틸리티를 사용하는 이유는 무엇입니까? ss -lntp 에 의해 제공되는 유틸리티입니다. iproute2 모음곡.
MariusMatutiae

7

이 작업을 수행 할 수있는 또 다른 도구는 다음과 같습니다. lsof:

# lsof -i -a -p 1981
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1981 root    3u  IPv4    917      0t0  TCP host.example.com:ssh (LISTEN)
# lsof -i -a -p 1981 -n
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1981 root    3u  IPv4    917      0t0  TCP 10.1.2.3:ssh (LISTEN)
# lsof -i -a -p 1981 -n -P
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1981 root    3u  IPv4    917      0t0  TCP 10.1.2.3:22 (LISTEN)
#

사용 된 옵션은 다음과 같습니다.

  • -i 프로세스에 의해 열린 인터넷 포트를 출력하는 방법
  • -a 모든 옵션이 AND-ed되도록
  • -p 1981 프로세스 1981에 대한 출력을 표시하는 방법
  • -n 호스트 이름 조회를 금지하고 대신 IP 표시
  • -P 대신 서비스 조회를 금지하고 포트 번호를 표시합니다.

lsof 큰 출력에서 ​​추출하지 않고 확인할 프로세스를 지정할 수 있다는 이점이 있습니다. netstat 시스템에서 더 안정적으로 사용할 수 있지만 lsof 이전보다 더 표준이되고 있습니다.


모니터하고 싶은 어플리케이션을 실행하기 전에이 명령을 실행하고 싶습니다.하지만 어플리케이션을 시작하기 전에 어떤 pid를 얻을 수 있습니까?
Baz

@Baz, 응용 프로그램을 시작할 때 모니터링하고 싶다면 (예 : PID를 알기 전에) strace 솔루션은 @olivecoder가 제안했습니다.
gowenfawr


3

우리는 이미 좋은 답변을 가지고 있지만 명령이 실행되는 순간 열려있는 포트만 나열합니다.

strace 응용 프로그램 수명 동안 열린 연결을 모니터링하는 데 적합한 도구입니다.

strace -e socket,connect,close -f -o hipchat.strace.txt hipchat

출력에는 UDP 요청 및 열린 상태이지만 닫힌 연결 같은 추가 정보가 표시됩니다.


0

ss -a4 | less

나는 당신이 IPv4에 대해 말하고 있다고 가정하고있다. 그렇지 않다면, 앞의 명령에서 4를 6으로 대체 할 수있다. -a 매개 변수는 모든 포트 (listening과 non)를 보여준다. 화면에서 이름을 분석하지 않으려는 경우 -n을 매개 변수에 추가 할 수 있습니다.

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