리눅스 패킷캡쳐 하고있는데요..

yunssera의 이미지


지금 시간당 패킷 캡쳐할려고 하는데 너무 어렵네요.
시간당 캡쳐할려면

소스 중간에
pcap_open_live 부분만 바꿔주면은 되는건가요??ㅠㅠ

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

#define MAXBYTES2CAPTURE 2048

struct ip *iph;
struct tcphdr *tcph;

float threshold = 10.0;
float syn_rate =0.0;

time_t previous_time =0;
time_t current_time =0;

int num_sample =0;

void processPacket(u_char * useless, const struct pcap_pkthdr* pkthdr, const u_char* packet){

static int count = 1;
struct ether_header *ep;
unsigned short ether_type;
int chcnt =0;
int length = pkthdr->len;
int i;

ep = (struct ether_header *) packet;
packet += sizeof(struct ether_header);
ether_type = ntohs(ep->ether_type);

if(ether_type == ETHERTYPE_IP) {
iph = (struct ip *) packet;
printf("IP Packet\n");
printf("Version : %d\n", iph->ip_v);
printf("Header Len : %d\n", iph->ip_hl);
printf("Src Addr : %s\n", inet_ntoa(iph->ip_src));
printf("Dest Addr : %s\n", inet_ntoa(iph->ip_dst);

// pps 瑜?援ы븷?ㅻ㈃? if 臾??덉뿉???섏젙?대낫??. 留덉?留?ppt 蹂대㈃?€ ?⑦궥罹≪퀜瑜??좊븣 tcpdump ip (?꾪꽣?섎뒗寃? 'tcp[tcpflags] & (tcp-syn[tcp-fin)!=0 ~~~

if(iph->ip_p == IPPROTO_TCP) {
packet +=iph->ip_hl*4;
tcph = (struct tcp *) packet;

if(tcph->th_flags ==TH_SYN){

if(current_time == 0){
current_time = time();
num_syn=1;
rate = num_syn/60.0 //rate calculation
}

else if(current_time >0){ //泥섏쓬???쒕쾲 ?ㅽ뻾?덉쑝?덇퉸 else if
if (previous_time ==0 ) //?댁쟾?쒓컙 ?ㅼ젙???덈맟?쇰?濡?0
previous_time = current_time;
current_time =time();
if difftime(current_time,previous_time) <60)
rate =(num_syn + 1)/60.0; //rate 珥덈떦怨꾩궛

else if (difftime(current_time,previous_time) >=60)
printf("recent syn packet rate (/sec) is %f",rate);
num_sample++;
avg_rate = (avg_rate*num_sample-1)+rate)/num_sample;
printf("AVG syn packet rate (/sec) is %f",avg_rate);
previous_time = current_time;
num_syn =1;
rate = num_syn/60.0; //rate calculation

}

}
}

if(rate > threshold)
printf(" Alarm !!! the tcp syn scan is occurred~~ \n");

printf("Src Port : %d \n", ntohs(tcph->source));
printf("Dst Port : %d \n", ntohs(tcph->dest));
}

printf("Payload: \n");
for (i=0; ilen; i++) {
if(isprint(packet[i]))
printf("%c ", packet[i]);
else
printf(". ");

if( (i%16 == 0 && i != 0 ) || i == pkthdr->len-1 );
printf("\n");
}

return;
}

int main(int argc, char **argv){
int i=0, count=0;
pcap_t *descr = NULL;
char errbuf[PCAP_ERRBUF_SIZE], *device=NULL;
memset(errbuf, 0, PCAP_ERRBUF_SIZE);

char *net;
char *mask;
bpf_u_int32 netp;
bpf_u_int32 maskp;

struct in_addr addr;
struct bpf_program fp;

device = pcap_lookupdev(errbuf);

printf("Openinig device %s\n", device);
pcap_lookupnet(device,&netp, &maskp,errbuf);

addr.s_addr = netp;
net= inet_ntoa(addr);
printf("NET: %s\n",net);

addr.s_addr = maskp;
mask =inet_ntoa(addr);
printf("MASK: %s\n",mask);

getchar();

descr = pcap_open_live(device, MAXBYTES2CAPTURE, 1, 512, errbuf);

pcap_compile(descr,&fp, argv[2], 0, netp);

pcap_setfilter(descr, &fp);

pcap_loop(descr, atoi(argv[1]), processPacket, (u_char *) &count);

return 0;
}

binilpaper의 이미지

단순히 시간당 패킷량을 계산하는 거라면...
/sys/class/net/eth0/statistics/ 에 가보시면 ( eth0 는 다를수도 있습니다. )
rx_packets, tx_packets 이 부분을 1시간 주기로 읽어서 이전값 - 현재값 정도로 하시면 될 듯 싶은데요 ^^;

-----------------------------------------------------
세상은 인간이 해결해야할 문제들로 가득차 있다.

shint의 이미지

http://blog.naver.com/PostView.nhn?blogId=h4ck_you&logNo=30130860074&parentCategoryNo=&categoryNo=25&viewDate=&isShowPopularPosts=true&from=search

악용 또는 법을 위반한 해킹의 시도'등에 사용할경우 법적 책임이 있으니 조심하셔야 합니다. ㅇ_ㅇ;;

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.