2012-09-27 7 views
1

Mac OS X의 특정 포트에서 패킷을 모니터하고 싶습니다. 내용을 읽을 수 있고 가능한 경우 내용을 변경할 수 있습니다. KEXT를 작성하는 것이 가능한지 궁금 해서요. 아니면 응용 프로그램에서이 작업을 수행하고 즉시 결과를 표시 할 수 있습니까? 이를 달성하기 위해 사용할 수있는 도서관 및 접근 방법에 대한 정보를 제공해 주시면 감사하겠습니다.포트의 코코아 모니터 패킷

+0

오타의 가능성이있는 스마트 자석을 수정했습니다. "이를 달성하기 위해 사용할 수있는 라이브러리 및 접근 방법에 대한 정보를 제공해 주시면 감사하겠습니다." - 나는 네가 할 수없는 많은 예제들을 줄 수있다 **. 바나나와 식용 소금이 떠오른다. ;-) –

답변

1

"모니터 패킷"은 어떤 의미입니까?

특정 TCP 또는 UDP 포트로 보내지는 패킷 또는 특정 TCP 또는 UDP 포트에서 보낸 패킷을 보거나 특정 네트워크 인터페이스에서 어떤 패킷을 보내거나 받았는지 확인하는 경우 다른 UN * Xes와 마찬가지로 pcap library을 사용합니다. libpcap/WinPcap은 Wireshark와 tcpdump가 사용하는 라이브러리입니다. OS X에서 사용하는 기본 커널 메커니즘은 XNU에 내장 된 BPF (버클리 패킷 필터)입니다 (이는 오픈 소스입니다 - bsd/net/bpf.cbsd/net/bpf_filter.c 파일과 XNU 소스에 포함 된 헤더 파일 참조) kext가 필요하지 않습니다. (Wireshark는 자체 kext를 가지고 있지 않으며 libpcap/WinPcap을 사용하여 Linux 및 OS X 및 * BSD, Solaris 및 HP-UX, AIX 및 Tru64 UNIX 및 IRIX 등에서 작동 할 수 있습니다. WinPcap이 설치되어 있으므로 OS X 및 * BSD에서는 궁극적으로 BPF를 사용합니다.)

Libpcap/WinPcap은 Linux를 제외하고 하나의 "핸들"이있는 모든 인터페이스에서 캡처 할 수 있습니다. pcap_findalldevs()을 사용하여 현재 사용 가능한 모든 인터페이스를 찾은 다음 각 인터페이스에 대해 별도의 핸들을 열어야합니다. "포트"가 "네트워크 포트"를 의미하므로 하나의 "포트"가 이더넷 포트이고 다른 포트가 Wi-Fi 어댑터 인 경우 캡처하려는 모든 "포트"를 개별적으로 열어야합니다.

"포트"는 TCP 또는 UDP 포트를 의미하며 특정 포트로 또는 특정 포트로만 트래픽을 보려는 경우 "필터"식을 지정하고이를 "BPF 코드"로 번역해야합니다 (pcap_compile()). 그런 다음 특정 libpcap/WinPcap 핸들에 대한 필터를 pcap_setfilter()으로 지정하십시오.

pcap 용 Cocoa 래퍼를 사용하려는 경우 이전에 Google 검색에서 packetsnifferCapKit을 발견했습니다. 나는 그 중 하나를 사용하지 않았으므로 하나 또는 다른 것을 추천 할 수는 없습니다.

+0

답변 해 주셔서 감사합니다. HTTP 요청 및 응답을 읽으려고합니다. pcap을 사용하여 IP 패킷 때문에 읽지 못하는 'u_char * 패킷'을 얻습니다. HTTP 요청 및 응답을 추출하는 적절한 방법이 있습니까? pcap로? –

+0

@AbcdEfg 아마도 투명한 HTTP 프록시 일 것입니다. – pmdj

+0

Pcap이 모든 작업을 처리하지는 않습니다. 캡처 필터를 "tcp"로 지정하면 TCP 세그먼트를 인식하는 작업을 수행하지만 페이로드에 도달하려면 링크 계층, IP 및 TCP 헤더를 건너 뛰어야합니다. 페이로드에서 HTTP 메시지를 추출하십시오. –

0

OS X와 ​​iOS가 유닉스이고 Objective-C가 C이기 때문에 대답은 "C 유닉스에서와 같은 방식"입니다. 코코아는 높은 수준이며 원하는 것은 저수준입니다. 그래서 그 질문을 찾을 수는 없지만 누군가가 네트워크 모니터링의 예로 MenuMeters의 출처를 살펴 보라고 제안했습니다.

1

당신은 Apple's overview documentation on Network Kernel Extensions을 보았습니까? 그것은 당신을 시작해야합니다.

this book의 다운로드 소스 코드에는 네트워크 스택의 다양한 수준에서 몇 가지 패킷 필터링 예제 NKE가 포함되어 있습니다. (물론 책에서도 13 장의 내용을 자세히 설명합니다.)

순수 모니터링을 위해 기존 오픈 소스 kext를 다시 사용할 수 있습니다. Wireshark 응용 프로그램은 이미이 작업을 수행 할 수 있습니다. kext에 후크하기. 실제로 패킷 스트림을 수정하려면 커널에서 순전히해야 할 것입니다.

+0

답변 해 주셔서 감사합니다.하지만 KEXT 작업을 시작하기 전에 응용 프로그램 런타임에서 KEXT를 사용하지 않고 수행 할 수 있는지 알고 싶습니다. –

+0

앞에서 말했듯이, Wireshark를 기반으로하는 기존 커널 -> 사용자 공간 패킷 모니터를 사용할 수 있습니다.커널에서 직접하지 않는 한 실시간으로 ** 패킷을 수정할 수 있다고 생각하지 않습니다. – pmdj