어떤 프로세스가 특정 포트로 데이터를 전송하는지 어떻게 알 수 있습니까? 열어두고 서비스를 제공합니다. 데이터를 얻거나

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

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



답변

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'대신 휴리스틱으로 사용할 수 있습니다 .


답변

다음을 시도하십시오.

$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


답변

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

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

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

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


답변

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

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

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


답변

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

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


답변