📄 catch.c~
字号:
/* *autor:tianyongzhen *filename:catch.c *object:get raw packets from your ethernet with your net broadcast *use:libpcap *notice:no use raw socket,for libpcap could give us some rules to fltier packets with bpfs */#include <gtk/gtk.h>#include <glade/glade.h>#include <stdio.h>#include <string.h>#include <pcap.h>#include "catch.h"GtkWidget * textview2 ;char filter_app[1024] ;voidinsert_time_to_textview2 (){ GtkTextBuffer *buffer; GtkTextIter end; time_t start ; char data[30]={0} ; time(&start) ; sprintf(data, "%s", ctime(&start)); buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview2)); //textview2是一个gtktextview控件 gtk_text_buffer_get_end_iter(buffer,&end); gtk_text_buffer_insert(buffer, &end, "\n", -1); gtk_text_buffer_get_end_iter(buffer,&end); gtk_text_buffer_insert(buffer, &end, data, -1);}voidinsert_text_to_textview2 (gchar * data){ GtkTextBuffer *buffer; GtkTextIter end; buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview2)); //textview2是一个gtktextview控件 gtk_text_buffer_get_end_iter(buffer,&end); gtk_text_buffer_insert(buffer, &end, data, -1); gtk_text_buffer_get_end_iter(buffer,&end); gtk_text_buffer_insert(buffer, &end, "\n", -1);}void catch_packets(void){#ifdef JUSTFORFUN for(;;) printf("catch packets\n") ; char *dev ; char errbuf[PCAP_ERRBUF_SIZE] ; pcap_t *descr ; bpf_u_int32 mask ; bpf_u_int32 net ; struct bpf_program fp ;#else ;//do nothing char *dev ; char errbuf[PCAP_ERRBUF_SIZE] ; const unsigned char *data = NULL; int ret ; pcap_t *descr ; bpf_u_int32 mask ; bpf_u_int32 net ; struct bpf_program filter ; struct pcap_pkthdr pkthdr ; descr = pcap_open_live ( "eth0", 4096, 1, 512, errbuf ); if(descr == NULL) perror("open eth0 error!") ; ret = pcap_lookupnet ( "eth0",&net,&mask, errbuf ); if(ret == -1) perror("look up net error!") ; char net_info[500] ; sprintf(net_info, "Interface: eth0 Net_IP: %s Mask: %s", inet_ntoa(net),inet_ntoa(mask)) ; read_rules_from_file() ; set_filter_app() ; //compile the rules pcap_compile(descr,&filter,filter_app,1,mask) ; //pcap_compile(descr,&filter,"",1,mask) ; pcap_setfilter(descr,&filter) ; while(1) { data = pcap_next(descr,&pkthdr) ; if(data == NULL){ perror("catch packet error!") ; exit(0) ; } insert_time_to_textview2 () ; insert_text_to_textview2((gchar *)net_info) ; //analysis }#endif}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -