특정 포트로 데이터를 보내는 프로세스를 찾는 방법은 무엇입니까?

특정 포트로 데이터를 보내는 프로세스를 찾는 방법은 무엇입니까?

특정 포트를 열어두는 서비스가 있습니다.

예상하지도, 얻고 싶지도 않은 데이터를 얻고 있는데, 그 데이터가 어디서 오는지 알아내려고 노력하고 있습니다. 그렇다면 어떤 프로세스를 어떻게 찾을 수 있습니까?보내다데이터는 수신 대기 중인 프로세스가 아닌 특정 포트로 전송됩니다.

답변1

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

lsof -nPi tcp:the-port

이 포트에서 TCP 소켓을 여는 프로세스가 보고됩니다. 소스 포트를 알고 있다면(서버 애플리케이션이 이를 알고 기록할 수 있음) 이를 사용하여 악성 클라이언트를 정확히 찾아낼 수 있습니다.

UDP나 RAW 소켓에서는 이것이 더 까다롭지만, systemtap이나 dtrace와 같은 것이 유용할 수 있다고 생각합니다. 검토되기도 합니다.


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

답변2

다음을 시도해 보세요:

$sudo ss -tp

또는:

$sudo netstat -A inet -p

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

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

설정된 연결만 나열합니다.

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

답변3

데이터 전송을 위해 설정한 연결 유형에 따라 다음 방법 중 하나가 목표 달성에 도움이 됩니다.

  • tcpdump port 1234이 포트로 전송된 데이터를 가져오는 데 사용됩니다 . Wireshark와 같은 프로그램을 사용하여 다른 컴퓨터에서 분석할 수 있습니다( -w파일로 캡처하려면 이 옵션을 사용하십시오). 또는 Wireshark를 직접 사용하세요.

  • 열린 TCP/UDP 연결을 설정하고 유지하는 경우 이를 사용하여 netstat연결의 원격 IP를 찾을 수 있습니다.

  • @StephaneChazelas가 제공한 답변에 표시된 대로 프로세스의 열린 소켓을 나열합니다.

답변4

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

Linux에서는 netstat -anp --inetlsof가 설치되지 않은 경우에도 작동합니다. ( --inetUnix 도메인 소켓을 얻기 위해 제거할 수도 있음)

관련 정보