2010-12-08 6 views
2

현재 pcap만을 사용하여 같은 인터페이스에서 스니핑하고 pcap_inject를 사용하여 패킷을 주입 할 수 있습니다.libapcap이 pcap_inject()로 삽입 된 패킷을 캡쳐하지 못하도록 막으려 고합니다.

것은 사용 쉽게 해결 될 수 있습니다 :

  • 지속적인 검사 추적/대형 느린 맵/
  • 체크섬 추적 - 모든 데이터가 주입 될 때까지, 말, 첫 번째 HTTP 요청;
  • 각각의 실제 PHY 패킷

그러나 대한 추가 매개 변수를 전달하는 BPF/libipq/넷 필터를 해킹 :

PCAP는 eth0를/realworld 상황이 /가 "PCAP이 수신 및 소스의 마법을 통해 떨어진다"가까운 청취, pcap은 eth0의 핸들을 통해 패킷을 보내어 라우트 될 수 있습니다. 동일한 라이브러리를 사용하여 동일한 인터페이스에 주입 된 패킷을 캡쳐하지 않는 libpcap의 이론적 기반은 무엇입니까? 예 : 주입 된 패킷이 모든 버클리의 패킷 필터 코드를 통과하지 못합니다.

실제 테스트 미정.

답변

1

당신의 질문은 분석하기가 어렵지만, 당신을 올바르게 이해한다면, 당신이 주사하는 패킷을 제외하는 패킷을 포착 할 방법을 찾고 있습니다. 당신은 ... 단지 당신의 컴퓨터에 관련 인터페이스로 전송되는 것을 본다 캡처 필터를 사용하여

ether dst aa:bb:cc:dd:ee:ff 

을 수행 할 수 있습니다 ... 또는 그와 관련된 모든 interfance에 전송되는 것을 제외하고 캡처 :

not ether src aa:bb:cc:dd:ee:ff 

이것은 주입하는 것 이외의 트래픽에 영향을 미치지 만 캡처하고 주입하면 사용자의 컴퓨터 패킷을 무시할 가능성이 높습니다. 더 많은 사용자 지정이 필요한 경우 캡처 한 패킷에서 방금 보낸 패킷을 식별하는 것이 어렵지 않습니다. (체크섬에 의해 의미가 있다고 생각되지만 즉각적인 테이블 문제는 보이지 않습니다.)

+0

이것은 훌륭하게 간단합니다 :) 당신의 현상금을 가지고 있습니다. 다른 사람이 skbuff 서브 시스템에 대해 다시 언급했는데 지금까지는 안됩니다 .. –

+1

인터페이스에서받은 패킷 * 만 보려는 경우'pcap_setdirection (p, PCAP_D_IN)'을 사용할 수도 있습니다. 그러나 이것은 사용자가 삽입 한 패킷을 볼 수 없다는 것을 의미 할뿐만 아니라, 사용자의 머신이 일반 네트워킹 스택을 통해 전송하는 패킷을 볼 수 없다는 것을 의미합니다. 그러나 필터를 사용하면 마찬가지입니다 이더넷 소스 주소. –

1

아마도 수신 경로에서 속성이 skb->pkt_type == PACKET_OUTGOING 인 패킷을 무시하십시오.

+0

... Linux를 실행중인 경우 ... 리눅스를 사용하지 않는다면 다른 메커니즘을 사용해야 할 것입니다. –