패킷 전달 중에 (라우팅 안 함) 가져오고 싶습니다. 예를 들어 시스템은 호스트와 게이트웨이 사이의 계층 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로 판명 될 수 있습니다 나에게 익숙해.
PCAP는 조립 매크로를 포함하는 끔찍한 구문을 가진 BPF의 멋진 인터페이스입니다 (비록 어떻게 든 통과 했음에도 불구하고). PCAP로만 패킷을 스니핑 할 수 있습니다. –
PCAP는 tcpdump 동료가 작성한 패킷 캡처 라이브러리입니다. 패킷 조작을위한 것이 아니므로 실제로 PCAP 필터를 실제 트래픽 필터링과 혼동하게됩니다. PCAP 필터는 실제 패킷을 포착 할 트래픽을 필터링하는 데 사용됩니다. [여기 링크입니다] (http://www.tcpdump.org/) –
ouch nvm, 혼란을 가져 주어서 죄송합니다. 이전 의견은 삭제되어 더 이상 독자가 혼동하지 않도록하십시오. – Fingolfin