Linux 네트워크 스택에서 패킷 추적

Linux 네트워크 스택에서 패킷 추적

모든 네트워크 계층을 통해 패킷을 추적할 수 있습니까?리눅스 커널 내부? SystemTap에 대해 알고 있지만 다른 (더 높은 수준의) 솔루션이 있는지 확인하고 싶었습니다.

내가 직면하고 있는 문제는 다음과 같습니다. 여러 인터페이스, 브리지, 여러 규칙이 있는 방화벽, 사용자 지정 테이블을 사용하는 일부 고급 라우팅을 갖춘 라우터 역할을 하는 컴퓨터가 있습니다. 일부 수신 패킷 응답은 로컬 프로세스로 전달되지 않으며(tcpdump를 사용하여 확인하더라도) 라우팅, 방화벽 또는 기타 이유로 손실되었는지 확인하기가 어렵습니다.

저는 "abcd에서 인터페이스로 들어오는 패킷을 추적할 수 있는" 이 문제를 해결하는 데 도움이 될 수 있는 몇 가지 도구를 찾고 있습니다. strace와 비슷하지만 패킷용입니다.

그런 것이 존재하나요?

답변1

때로는 커널이 사용자 공간으로 내보낸 통계/SNMP 카운터를 조사하여 Linux 커널 스택의 패킷 통과에 대한 정보를 얻을 수 있습니다. 예를 들어 "netstat -s"를 통해(또는 읽기가 덜 쉬운 "cat /proc/net/snmp"를 통해). 예를 들어 잘못된 IPv4 헤더로 인해 일부 오류가 발생하면 InHdrErrors가 증가하고 "cat /proc/net/snmp"는 이 오류가 발생했음을 표시합니다. "cat /proc/net/snmp" 실행(네 번째 호출)을 참조하세요. "InHdrErrors" 시 획득한 열 IP): DefaultTTL InReceives InHdrErrors InAddrErrors 전달

커널 코드를 보면 ip_recv() 메서드(IPv4 트래픽 핸들러)에서 최소 헤더 길이를 확인하거나,
IPv4 헤더의 버전 멤버가 "4"인지 확인하고, 그렇지 않은 경우에는 IPSTATS_MIB_INHDRERRORS 카운터가 증가합니다.

바라보다: http://lxr.free-electrons.com/source/net/ipv4/ip_input.c#L444 http://lxr.free-electrons.com/source/net/ipv4/ip_input.c#L494 http://lxr.free-electrons.com/source/include/uapi/linux/snmp.h

물론, 다른 유형의 오류도 있으며 Linux 커널 스택에는 일반적인 패킷 통과에 대한 SNMP 카운터/통계가 있습니다. 이는 "netstat -s" 및/또는 "cat /proc/net/snmp를 실행할 때 탐색할 수 있습니다. " ".

라미 로젠

관련 정보