리눅스에서는 네트워크를 통해 활성 네트워크를 나열 할 수 있음을 알고 있습니다. lsof -i
또는 netstat. 그러나, 내가 아는 한,이 유일한 목록 연결은 현재 열려있다. .
프로세스가 짧은 연결을 만든 다음 종료하면 (예 : “전화를 거는 프로그램”과 같이), 실행하지 않으면 나는 그것을 놓치고 싶습니다. lsof
바로 그 순간에. 연결된 서버 목록을 가져 오는 방법이 있습니까? 예를 들어, 시스템 전반에 새로운 연결이 열릴 때마다 파일에 IP 주소를 쓰는 도구.
이 작업을 위해 wireshark와 같은 네트워크 스니퍼를 영구적으로 열어 두는 것은 과도한 것으로 보입니다.
답변
프로세스가 짧은 연결을 설정하고 종료하면 (예 : “phoning home”프로그램)
이 프로그램의 대부분은 TCP 연결을 생성하여 정보가 ‘집’에 도착할 것을 보장합니다. 이 경우, netstat
명령은 가장 친한 친구가 될 것입니다. 왜냐하면 모든 닫혀진 TCP 연결이 조금 더 오랜 시간 동안 유지되기 때문입니다. TIME_WAIT
주 및 netstat --inet -n
이러한 연결 (및 현재 열리는 연결)도 나열합니다.
운이 좋지 않고 부적절한 프로세스가 UDP 연결을 사용하거나 더 오랜 기간 동안 트래픽을 모니터링하려는 경우 TCPDump 또는 IPTraf와 같은 도구를 사용하여 시스템의 전체 네트워크 트래픽을 모니터링해야합니다. IPTraf는 IP 주소와 포트만 기록하기 때문에 더 간단합니다. TCPDump는 이름에도 불구하고 UDP 및 ICMP 트래픽을 모니터링 할 수있는 고급 도구이며 모든 네트워크 트래픽을 기록합니다.
답변
나는 그것을 시도하지 않았지만 iptables를 LOG
출력 사슬의 목표?
다음과 같은 것 (테스트되지는 않았지만, 요지가 있음).
iptables -I OUTPUT ! -i lo -p tcp --syn -j LOG --log-prefix 'New TCP'
iptables -I OUTPUT ! -i lo -p udp -m state --state NEW -j LOG --log-prefix 'New UDP'
이것은 각 TCP 연결마다 한 번씩, 루프백 인터페이스를 제외하고 각각 새로운 UDP 세션마다 한 번씩 기록됩니다. 대략적으로 사용자가 요구하는 것 같습니다. 그런 다음 grep
나가는 연결이 이루어진 후에 알기 위해 시스템 로그.
그러나, 어떤 응용 프로그램이 연결을 시작했는지 알려주지는 않습니다 (그리고 나는 일반 iptables로 생각할 수 없습니다). 그러면 톤 이 로그는 대부분 사용하지 않을 것입니다 (합법적 인 연결 수가 많아지면 모든 전화가 완료되지 않을 것입니다).
답변
65000 개 이상의 포트를 청취해야합니다. 방화벽의 네트워크 스니퍼 만이 할 수 있습니다. 스니퍼 또는 방화벽 로그 규칙에 대한 올바른 필터 (새 연결 요청의 경우) 만 구성하면됩니다.