2009-12-08 3 views
0

pcap_compile()bpf_program 구조체의 형식으로 문자열을 필터 프로그램에 컴파일합니다. 이론적으로 나는 컴파일 된 형태의 프로그램을 저장하여 다른 네트워크 인터페이스 또는 다른 컴퓨터의 pcap_setfilter()에 제공 할 수 있습니다.pcap_compile의 출력은 얼마나 portable합니까?

그게 가능할까요? bpf_program 양식이 다른 인터페이스를 통해 이식 가능합니까? 다른 프로세스? 다른 아키텍처? 아니면 그것을 사용하고 싶을 때마다 표현식을 컴파일하는 것이 가장 안전합니까?

pcap_open_dead()의 존재를 기반으로 다소 휴대용이지만, 안전하고 무엇이 문서의 어느 곳에서도 쓰여지지 않는 것으로 보입니다.

답변

1

아니요, 일반적으로 이식 가능하지 않습니다.

동일한 컴퓨터에서 사용할 수 있습니다.

비슷한 기계에서 다소 안전합니다. 다른 아키텍처? 아마도 그렇지 않습니다. 어쩌면 그들은 비슷한 유형을 가지고 있습니다. 다른 운영 체제? 아닙니다. 저는이 중 어떤 것도 추천하지 않습니다.

정말로 알고 싶으면 표현식을 사용할 때 컴파일하십시오. 거의하지 않으면 시간이 많이 걸립니다. 표현식을 빠르게 전환하는 경우 몇 가지 방법을 사용하는 것이 좋습니다.

+0

감사합니다. 매우 도움이됩니다. 동일한 컴퓨터의 다른 인터페이스/장치는 어떨까요? – benzado

+1

동일한 기계에있는 다른 인터페이스는 괜찮을 것이라고 생각합니다. 모든 구현에 대해 완전히 확신하지는 못합니다. 이더넷/루프백/ieee1394와 같은 인터페이스의 종류/종류에 대해서는 실제로 주저합니다. 내가 코드를 해킹하고 일이 내 머리 속에서 새어 나올 때부터 1 년이 넘었지만 의심 스럽습니다. – McPherrinM

+0

동일한 링크 계층 헤더 유형 *을 사용하는 다른 인터페이스 *는 동일한 BPF 코드를 실행할 수 있습니다. * 다른 * 링크 계층 헤더 유형이 다른 인터페이스 (예 : 이더넷 대 802.11 대 PPP는 동일한 BPF 코드를 실행할 수 없습니다 (물론 같은 BPF 코드를 실행할 수는 있지만 코드는 다른 링크 계층 헤더 유형의 인터페이스에서 필터로 올바르게 작동하지 않습니다) BPF 코드가 컴파일 된 코드). –

관련 문제