IP를 호출하는 프로세스의 PID를 결정합니다.

IP를 호출하는 프로세스의 PID를 결정합니다.

내 Wi-Fi 카드가 내 로컬 네트워크에 있는 임의의 IP 주소에 연결을 시도하고 있습니다. 원인을 파악하기 위해 클라이언트의 어떤 프로세스가 이 연결을 설정하려고 하는지 찾고 싶습니다.

이는 특히 MacOS에서 두드러지는데, 다른 Linux/Unix 변형에서도 이 작업을 수행하는 방법도 궁금합니다. Mac은 Wi-Fi를 통해 로컬 네트워크에 연결되어 있습니다. USB를 통해 삭제된 드라이브에 MacOS High Sierra를 다시 설치했지만 Wi-Fi 카드가 여전히 연결을 시도합니다.

Wireshark를 사용한 네트워크 트래픽의 패킷 캡처는 네트워크 카드가 약 1분 30초마다 호출을 하고 SYN 패킷을 전송하여 로컬 네트워크(192.168.86.173, 포트 7000)의 IP에 연결을 시도하고 있음을 보여줍니다. 그러면 클라이언트가 액세스하려는 IP가 응답하지 않기 때문에 SYN이 여러 번 재전송됩니다.

Wireshark는 클라이언트에서 알 수 없는 LAN 호스트로 시도된 연결을 캡처합니다.

pingIP 192.168.86.173 이 있지만 nmap응답이 없습니다. 네트워크 스캐너를 사용했지만 해당 IP에 장치가 표시되지 않았습니다.

포트 7000을 찾아보니 TCP가 아닌 UDP를 사용하는 파일 서버만 찾았습니다. (https://www.auditmypc.com/tcp-port-7000.asp), 그리고 자동차 테스트에 TCP를 사용하는 Gryphon이라는 것(http://www.networksorcery.com/enp/protocol/ip/ports07000.htm).

데스크탑에서 모든 응용 프로그램을 닫은 다음 lsof -i tcp매뉴얼 페이지에서 .

-i [i] 인터넷 주소가 i에 지정된 주소와 일치하는 파일 목록을 선택합니다. 주소가 지정되지 않은 경우 이 옵션은 모든 인터넷 및 x.25(HP-UX) 네트워크 파일 목록을 선택합니다.

프로세스는 나열되지 않으며, SYN 패킷이 전송되고 재전송되는 동안 실행 중이더라도 프로세스가 표시되지 않습니다. 클라이언트의 어떤 프로세스가 이 연결을 설정하려고 하는지 확인할 수 있는 방법이 있습니까?

netstat루프에서 실행하고 PID명령 이름을 반환할 수 있는 시도된 나가는 연결만 표시하는 명령이 있습니까 ?

레벨이 너무 낮아서 PID또는 명령 이름을 알 수 없는 것 같나요 ?Wireshark

답변1

syn 패킷이 실제 연결 시도의 일부인 경우 다음과 같이 적절한 위치에 소켓과 프로세스를 나열할 수 있습니다.

netstat -apn | grep SYN_SENT

이것은 Linux에서 작동합니다. 이 -p플래그는 소켓을 소유한 프로세스의 이름을 나열합니다. 기준을 구체화/변경하여 grep원하는 행을 얻을 수 있습니다.

MacO의 경우 다음을 수행할 수 있습니다.

lsof -i -P | grep -i "SYN_SENT"

Linux로 돌아가서 또 다른 방법은 서버를 로컬 프로세스로 리디렉션하여 해당 주소/포트에 서버를 설정하는 것입니다.

# iptables -t nat -A OUTPUT -p tcp --dport 7000 -j DNAT --to-destination 127.0.0.1:7777

$ nc -l 7777

netstat -p...이제 연결이 설정되었으므로 소켓을 닫기 전에 명령을 실행할 시간이 더 많아집니다.

netstat -apn | grep 7000

또한 연결에서 일부 TCP 트래픽을 트리거하여 클라이언트에 대해 자세히 알아볼 수 있습니다.

Linux에서는 를 사용하겠지만 ssMacOS를 언급하신 것은 netstat확실합니다. 모든 소켓을 나열하려면 루트로 netstat및 를 실행해야 할 수도 있습니다 .lsof

관련 정보