어떤 프로세스가 특정 포트로 데이터를 전송하는지 어떻게 알 수 있습니까?


21

특정 포트를 열어두고 서비스를 제공합니다.

데이터를 얻거나 기대하지도 않고 싶지도 않습니다.이 데이터의 출처를 정확히 지적하려고합니다. 따라서 어떤 프로세스가 수신 대기 중인지와 달리 특정 포트 데이터를 보내는 프로세스를 어떻게 찾을 수 있습니까?

답변:


23

TCP의 경우 (SCTP 1 또는 모든 연결 지향 전송 프로토콜 에서 동일한 접근 방식이 작동하지만 ) 수신 대기하는 것과 동일합니다.

lsof -nPi tcp:the-port

해당 포트에서 TCP 소켓이 열린 프로세스를보고합니다. 소스 포트를 알고있는 경우 (서버 응용 프로그램이 해당 포트를 알고 기록 할 수 있음) 대신이를 사용하여 불량 클라이언트를 찾아 낼 수 있습니다.

UDP 또는 RAW 소켓의 경우 systemtap 또는 dtrace와 같은 것이 편리한 곳이라고 생각하지만 까다로울 것입니다. 감사도 가능합니다.


1 SCTP 지원 (Linux 전용)이 lsof버전 4.86 에 추가되었지만 SCTP -i소켓을 명시 적으로 요청 하는 데 사용할 수 없습니다 . lsof -nP | grep -w 'SCTP.*:the-port'대신 휴리스틱으로 사용할 수 있습니다 .


이것은 SCTP에서 작동하지 않습니다.
sudo

1
@ sudo, 편집 참조
Stéphane Chazelas

3

다음을 시도하십시오.

$sudo ss -tp

또는:

$sudo netstat -A inet -p

localhost 결과를 피하려면 다음을 수행하십시오.

$sudo netstat -A inet -p | grep -v localhost

ESTABLISHED 연결 만 나열하려면 다음을 수행하십시오.

$sudo netstat -A inet -p | grep -v localhost | grep ESTABLISHED

2

연결 유형에 따라 데이터를 보내도록 설정하면 이러한 접근 방식 중 하나가 어딘가에 도달하게됩니다.

  • tcpdump port 1234이 포트로 전송되는 데이터를 얻는 데 사용 합니다. Wireshark와 같은 프로그램을 사용하여 다른 시스템에서 분석 할 수 있습니다 ( -w옵션을 사용하여 파일로 캡처 ). 또는 Wireshark를 직접 사용하십시오.

  • tcp / udp 연결을 설정하고 열어두면 연결 netstat의 원격 IP를 찾는 데 사용할 수 있습니다 .

  • @StephaneChazelas가 제공 한 답변과 같이 프로세스의 열린 소켓을 나열하십시오.


1

sockstat명령을 사용 하여 로컬 호스트에서 서비스 연결을 시작한 프로세스를 찾을 수 있습니다 .

DESCRIPTION
     The sockstat command lists open Internet or UNIX domain sockets.

모든 소스 연결을 대상에 일치시키기 만하면됩니다. TCP / UDP / UNIX 소켓에 적합합니다.


0

Solaris에서 모든 프로세스에서 pfile을 실행하면 어떤 프로세스가 어떤 연결을 열 었는지 표시해야합니다. 아마도 ggrep의 -A, -B 옵션을 사용하는 신중한 파일링이 필요합니다 ...

Linux에서는 netstat -anp --inetlsof를 설치하지 않아도 작동합니다. ( --inet유닉스 도메인 소켓을 얻으려면을 드롭하십시오 )

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