반응형

네트워크 및 보안/pcap 라이브러리 11

[pcap 라이브러리] 11. libpcap과 메모리 매핑 기술을 이용하여 지연 덤프 소스 코드

libpcap과 메모리 매핑 기술을 이용하여 지연 덤프현재의 게시글은 앞으로 pcap 라이브러리를 이용하여 tshark 유틸과 같은 네트워크 트래픽을 수집하고 분석하는 도구를 만드는 과정을 게시하기 위해 어떠한 순서로 진행할 지 결정하기 위한 더미 코드입니다.2016년 6월 이후부터 다양한 프로그래밍 언어와 기술에 관한 글과 무료 동영상 강의를 제작할 계획이며 그 중에 하나가 네트워크 보안에 관한 사항입니다. 네트워크 보안에 관한 주제는 네트워크 프로토콜, 소켓 프로그래밍, 리눅스에서 tshark 흉내내기, 윈도우즈에서 tshark 흉내내기와 C#언어로 와이어샤크 흉내내기 등을 다룰 예정입니다.많은 관심과 조언 바랍니다.아직 입문하기 위한 더미 코드들만 올린 상태입니다.참고로 네트워크 프로토콜은 어느정도..

[pcap 라이브러리] 10. 기타 함수들 사용 예제 코드(pcap_is_swapped, pcap_freecode ,pcap_set_datalink)

기타 함수들 사용하는 저장 파일과 byte order가 같은지 확인int pcap_is_swapped(pcap_t *p); //0: 같음, 1:다름 //pc_stoswap.c#include int main(int argc,char **argv){ char errbuf[PCAP_ERRBUF_SIZE]; pcap_t *pcap_handle; pcap_handle = pcap_open_offline(argv[1],errbuf); if(pcap_handle == 0){ printf("fail open_offline...%s\n",errbuf); } if(pcap_is_swapped(pcap_handle)==0){ printf("capture system's byte order is same with this h..

[pcap 라이브러리] 8. 저장한 파일을 이용하기 소스 코드 (pcap_open_offline)

저장한 파일을 이용하기device = pcap_open_offline(argv[1],errbuf); // char *device; pcap_t *pcap_handle; // device = pcap_lookupdev(errbuf);// if(device == 0){ printf("fail lookupdev...%s\n",errbuf); }// printf("find device: %s sniffing\n",device); pcap_handle = pcap_open_offline(argv[1],errbuf); if(pcap_handle == 0){ printf("fail open_offline...%s\n",errbuf); } //pcap_handle = pcap_open_live(device, 4096,..

[pcap 라이브러리] 7. 캡쳐한 패킷 파일로 덤프하기 소스 코드(pcap_dump_open, pcap_dump)

캡쳐한 패킷 파일로 덤프하기 덤퍼 열기pcap_dumper_t *pcap_dump_open(pcap_t *pcap_handle,const char *dfname); 캡쳐한 패킷 파일로 덤프pcap_dump(u_char *args,const struct pcap_pkthdr *header,const u_char *packet); //pc_dump.c#include "core_ehp.h" void catch_handler(u_char *args,cp_pkthdr *handle,cu_char *packet);void decode_eth(cu_char *base);int decode_ip(cu_char *base);int decode_tcp(cu_char *base);void decode_data(cu_char..

[pcap 라이브러리] 6. 자신의 Network에 필터를 적용하여 패킷 캡쳐 소스 코드

자신의 Network에 필터를 적용하여 패킷 캡쳐 //pc_netfilter.c#include "core_ehp.h" void catch_handler(u_char *args,cp_pkthdr *handle,cu_char *packet);void decode_eth(cu_char *base);int decode_ip(cu_char *base);int decode_tcp(cu_char *base);void decode_data(cu_char *packet,u_int len);void view_ether_addr(const char *pre,cu_char *base); int main(int argc,char **argv){ cu_char *packet; char errbuf[PCAP_ERRBUF_SIZE]..

[pcap 라이브러리] 5. 필터 적용하여 패킷 캡쳐하기(소스 포함)

필터 적용하여 패킷 캡쳐하기필터를 적용하려면 먼저 컴파일후에 설정해야 한다. 필터는 tcpdump의 필터식을 사용한다.필터 컴파일하기int pcap_compile(pcap_t *handle, struct bpf_program *fcode, const char *fstr, int opt, bpf_u_int32 mask);필터 설정하기int pcap_setfilter(pcap_t *p, struct bpf_program *fp)//pc_filter.c#include "core_ehp.h" void catch_handler(u_char *args,cp_pkthdr *handle,cu_char *packet);void decode_eth(cu_char *base);int decode_ip(cu_char *bas..

[pcap 라이브러리] 4. libpcap으로 패킷 해석하기 뼈대 만들기

libpcap으로 패킷 해석1 단계: 프로토콜 헤더를 정의한다.2 단계: 스니핑 코드 작성 pcap_loop을 이용3 단계: 패킷 캡쳐 핸들러를 작성 각 계층별로 패킷 해석 정보를 출력하는 함수 호출 1 단계: 프로토콜 헤더 작성 //core_ehp.h#ifndef __core_ehp_h#define __core_ehp_h #define ETH_ADDR_LEN 6 #include #include typedef const struct pcap_pkthdr cp_pkthdr;typedef const u_char cu_char;typedef struct pcap_pkthdr p_pkthr; typedef struct _eth_hdr eth_hdr;struct _eth_hdr{ u_char src[ETH_ADD..

[pcap 라이브러리] 3. 패킷 스니핑 소스(pcap_lookupdev, pcap_open_live, pcap_next, pcap_close)

패킷 스니핑 소스캡쳐할 수 있는 인터페이스 찾기char * pcap_lookupdev(char *ebuf);캡쳐 핸들 열기pcap_t *pcap_open_live(char *dev,int csize,int promisc, int msec,char *ebuf);캡쳐하기const u_char *pcap_next(pcap_t handle, struct pcap_pkthdr *header);캡쳐 핸들 닫기void pcap_close(pcap_t *handle); /*pc_sniff.c*/#include void dump(const u_char *packet,int len);int main(){ struct pcap_pkthdr header; const u_char *packet; char errbuf[PCAP_..

[pcap 라이브러리] 2. 자신의 Network IP와 Mask값 확인하기 소스

자신의 Network IP와 Mask값 확인하기 소스 int pcap_lookupnet(const char *devname, bpf_u_int32 *pnet, bpf_u_int32 *pmask, char *ebuf); //pc_lookup.c#include int main() { char *dev; char errbuf[PCAP_ERRBUF_SIZE]; bpf_u_int32 net_ip; bpf_u_int32 mask; struct in_addr net_addr, mask_addr; if(!(dev = pcap_lookupdev(errbuf))) { printf("%s\n",errbuf); return 1; }//if if(pcap_lookupnet(dev, &net_ip, &mask, errbuf) <..

반응형