2013-07-28 2 views
2

패킷 전달 중에 (라우팅 안 함) 가져오고 싶습니다. 예를 들어 시스템은 호스트와 게이트웨이 사이의 계층 2 브리지입니다. 레이어 7에서 문자열이나 뭐든지 "foo"를 확인하고 결과에 따라 패킷을 전달/삭제/지연하고 싶습니다. 내가 겪고있는 문제는 패킷을 가로 채는 것입니다. 내가 지금까지 읽은 내용BSD 패킷 차단 (복사 안 함)

:

은 내가 (스티븐 McCanne 및 반 제이콥슨 http://www.tcpdump.org/papers/bpf-usenix93.pdf에 의해 USENIX 용지) BPF 장치에서 패킷의 사본을 얻을 수있어. 그것은 스니핑에 좋지만 나에게는 그렇지 않다.

PF 장치에 액세스하여 결정을 전달하거나 삭제하는 데는 좋지만 검사에는 적합하지 않은 필터링 규칙을 설정할 수 있습니다. man pf (4)

패킷을 ALTQ 대기열로 가져올 수 있지만 대기열에있는 개별 패킷에 액세스하는 방법을 알지 못합니다. PF (/ usr/src/sys/contrib/pf/net), PFCTL (/ usr/src/contrib/pf/pfctl) 및 ALTQ (소스 코드)에 대한 소스 코드를 살펴 보았습니다./usr/src/sys/contrib/altq/altq). FreeBSD 9.1 시스템에서

저는 전문가는 아니지만 잘합니다.

어쩌면 나는 모든 독서에 오늘 피로하게되고 사소한 무언가를 놓쳤다. 만약 그렇다면 나를 용서해주십시오. 게다가,이 주제를 들여다 본 사람들을 아주 잘 찾을 것입니다.

P. 패킷의 "foo"를 탐지하고 그 요청에 대한 응답을 위해 필터를 설정하여 되돌아 오는 응답을 거부함으로써 "foo"의 흐름을 제어하는 ​​방법이 있습니다. 이것은 제가 성취하려는 것이 아닙니다. 패킷이 시스템을 벗어나지 않도록해야합니다.

EDIT 2 P.S. Linux에서이 작업을 수행하는 좋은 방법이 있습니다. libnetfilter_queue로 리눅스에서 언급 한 모든 것을 얻을 수 있습니다. 나는 리눅스에서 그것을하는 방법에 대한 많은 많은 튜토리얼이 있기 때문에 여기에 해결책을 게시하는 것을 걱정하지 않을 것이다.

결론적으로 나는 BSD에서이 작업을 수행하는 방법에 대한 답변을 찾고 있습니다. 필자가 이해할 수있는 한, pf를 기반으로 래퍼/라이브러리를 작성해야한다. (그물에 그런 것이 없기 때문에 - 이미 찾았어야한다.) libnetfilter와 libnetfilter_queue 라이브러리가 같은 역할을한다. 또는 어떻게 든 libnetfilter를 파고 FreeBSD로 포팅 할 수 있지만, iptables에 기반하고 있기 때문에 libnetfilter 라이브러리를 파헤 치면 실제 코드 자체가 아닌 로직 및 알고리즘이됩니다. 그 자체로는 no로 판명 될 수 있습니다 나에게 익숙해.

+0

PCAP는 조립 매크로를 포함하는 끔찍한 구문을 가진 BPF의 멋진 인터페이스입니다 (비록 어떻게 든 통과 했음에도 불구하고). PCAP로만 패킷을 스니핑 할 수 있습니다. –

+0

PCAP는 tcpdump 동료가 작성한 패킷 캡처 라이브러리입니다. 패킷 조작을위한 것이 아니므로 실제로 PCAP 필터를 실제 트래픽 필터링과 혼동하게됩니다. PCAP 필터는 실제 패킷을 포착 할 트래픽을 필터링하는 데 사용됩니다. [여기 링크입니다] (http://www.tcpdump.org/) –

+0

ouch nvm, 혼란을 가져 주어서 죄송합니다. 이전 의견은 삭제되어 더 이상 독자가 혼동하지 않도록하십시오. – Fingolfin

답변

1

FreeBSD 9.1에는 netmap이라는 패킷 액세스를위한 사용자 공간 프레임 워크가 있습니다. 그것은 최근 소개되었고 놀랄만한 성능 척도를 가지고 있습니다. 그것은 매우 간단하지만 강력한 일을합니다. NIC 버퍼를 메모리의 사용자 공간 부분에 밀착시키고 호스트 스택에서 패킷 처리를 분리합니다. 이것은 정확히 나머지가 필요하다는 것입니다. 사람이에 대한 제품 참조를 필요로하는 경우

뿐만 아니라 BSD 구현에 man netmap (4)

0

OpenDPI 또는 nDPI을 확인하십시오.

+0

노력에 감사하지만, 그 둘은 libpcap 기반 트래픽 스니퍼입니다. 내 질문에 대한 답변을 찾았으며 답변을 포함하도록 게시물을 업데이트합니다. –

0

체크 아웃 "전환 등 소켓"을 참조하십시오. 넷 맵과는 달리, 제로 카피 (IMHO)는 아니지만 처리하고자하는 패키지를 필터링하기 위해 필요한 필터를 구현하기 위해 ipfw와 함께 작동 할 수 있습니다.

관련 문제