특정 포트를 열어두고 서비스를 제공합니다.
데이터를 얻거나 기대하지도 않고 싶지도 않습니다.이 데이터의 출처를 정확히 지적하려고합니다. 따라서 어떤 프로세스가 수신 대기 중인지와 달리 특정 포트 로 데이터를 보내는 프로세스를 어떻게 찾을 수 있습니까?
답변
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 --inet
lsof를 설치하지 않아도 작동합니다. ( --inet
유닉스 도메인 소켓을 얻으려면을 드롭하십시오 )