2012-03-13 3 views

답변

0

예는

libpcap의이 패키지

알고

을 캡처하는 무차별 모드에서 NIC에 대한 액세스 권한을 부여하는 오픈 소스 C 라이브러리입니다 가능? 노하우를 들어, 난 그냥이 기억 :

- you can developed 
- use tcpdump and write a condition to capture and export to a file 
- use wireshark and write a condition to capture and export to a file 
+0

답장을 보내 주셔서 감사합니다. sniffex.c 프로그램에 TCP 연결을 사용하여 네트워크의 스니핑 IP 주소를 저장하고 싶습니다. –

+0

먼저 을 인쇄 한 다음 을 필터링 한 다음 파일로 내보내는 함수를 만듭니다. – F3rr31r4

0

을 snifex.c는 콜백 함수에서 좋은 출발 (http://www.tcpdump.org/pcap.html)

입니다 :

got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet); 

포인터 * ip는 ip 헤더의 시작을 가리 킵니다.

ip = (struct sniff_ip*)(packet + SIZE_ETHERNET); 

여기서 IP 주소 정보를 찾을 수 있습니다. 정적 버퍼를 사용하는 것처럼 inet_ntoa에 대한 호출을 분리해야합니다. cmd 또는 파일에 출력을 표시하려는 경우 두 개의 printf 호출을 사용해야합니다. 그들이 snifex.c 별도의 라인에있는 이유입니다 : 당신은 TCP 포인터

tcp = (struct sniff_tcp*)(packet + SIZE_ETHERNET + size_ip); 

사용하여 TCP 플래그를 사용할 수있는 TCP 정보

printf("  From: %s\n", inet_ntoa(ip->ip_src)); 
printf("   To: %s\n", inet_ntoa(ip->ip_dst)); 

TCP-> th_flags 연결을 찾을 수 상태, 예 tcp->th_flags==TH_SYN

RFC793 TCP/IP 상태 다이어그램을 확인하여 TCP 프로토콜의 상태를 확인해야합니다.

구현 측면에서 O (1) (최상의 경우)를 갖기 위해 각 4- 튜플 (srcIP, dstIP, srcPort, dstPort)에 대해 해시 배열을 사용할 수 있습니다. 중간 스트림 트래픽이나 half-open TCP 연결 등을 볼 수있는 경우가있을 수 있습니다. RFC는이를 처리하는 방법을 자세히 설명합니다.

마지막으로 TCP 프로토콜을 구현하지 않으려는 경우 Linux 2.0.x의 IP 스택을 에뮬레이트하는 Libnids 라이브러리를 사용하여 IP 조각 모음 및 TCP 스트림 어셈블리를 제공 할 수 있습니다.

관련 문제