免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2198 | 回复: 4
打印 上一主题 下一主题

请问有没有比较小的sniffer的源码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-09 23:08 |只看该作者 |倒序浏览
RT
谢谢。

论坛徽章:
0
2 [报告]
发表于 2007-10-09 23:39 |只看该作者
原帖由 huayd 于 2007-10-9 23:08 发表
RT
谢谢。

我朋友的主页上有一个。不过是在windows下的,功能完善
http://www.shaohui.org/snifferfox.html

论坛徽章:
0
3 [报告]
发表于 2007-10-10 01:54 |只看该作者
收藏先~~~~~~~~

论坛徽章:
0
4 [报告]
发表于 2007-10-10 08:47 |只看该作者
原帖由 huayd 于 2007-10-9 23:08 发表
RT
谢谢。

别人写的,我收藏的,别说我DB

  1. #include<netdb.h>
  2. #include<sys/socket.h>
  3. #include<stdio.h>
  4. #include<netinet/in.h>
  5. #include<sys/time.h>
  6. #include<arpa/inet.h>
  7. #include<error.h>
  8. #include<string.h>
  9. #include<unistd.h>
  10. #include<time.h>
  11. #include<stdlib.h>
  12. #include<sys/types.h>
  13. #define MAXDATALEN 4096

  14. int main(int argc,char **argv)
  15. {
  16.    struct _USERINFO{           
  17.       char sourceip[100];                 
  18.       char sourceport[100];               
  19.       char destip[100];                  
  20.       char destport[100];
  21.       char SnifferDataPath[100];   
  22.       int LogData;   
  23.        };
  24.    struct _RESULT {
  25.       char protocol[20];
  26.       char sip[100];
  27.       char dip[100];
  28.       short sport;
  29.       short dport;
  30.       short totalen;
  31.            };
  32.    struct tcphdr{
  33.       unsigned short sport;
  34.       unsigned short dport;
  35.       unsigned int seq;
  36.       unsigned int ack;
  37.       unsigned char hdlen;
  38.       unsigned char flag;
  39.       unsigned short window;
  40.       unsigned short chksum;
  41.       unsigned short urgp;
  42.            };
  43.    struct iphdr{
  44.       unsigned char hdlen_v;
  45.       unsigned char tos;
  46.       unsigned short totalen;
  47.       unsigned short id;
  48.       unsigned short fl_fr;
  49.       unsigned char ttl;
  50.       unsigned char proto;
  51.       unsigned short chksum;
  52.       unsigned int saddr;
  53.       unsigned int daddr;
  54.            };
  55.    struct udphdr{
  56.       unsigned short sport;
  57.       unsigned short dport;
  58.       unsigned short len;
  59.       unsigned short chksum;
  60.           };
  61.    struct icmphdr{
  62.       unsigned char type;
  63.       unsigned char code;
  64.       unsigned short chksum;
  65.           };
  66.    char *GetLocalIp();
  67.    int BornRawSocket();
  68.    struct _USERINFO sniffuserinfo;
  69.    struct _RESULT result;
  70.    int sockfd,i,fromlen,size=0;
  71.    FILE *file;
  72.    struct sockaddr from;
  73.    char *srcip,*destip,*srcport,*destport,data[MAXDATALEN];
  74.    struct iphdr *buffip;
  75.    struct tcphdr *bufftcp;
  76.    struct icmphdr *bufficmp;
  77.    struct udphdr *buffudp;
  78.    char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
  79.    time_t timep;
  80.    struct tm *p;
  81.    struct in_addr addr;
  82.    short _sport,_dport;
  83.    srcip=(char *)(malloc(100));
  84.    destip=(char *)(malloc(100));
  85.    srcport=(char *)(malloc(100));
  86.    destport=(char *)(malloc(100));
  87.    strcmp(sniffuserinfo.sourceip,"*");
  88.    strcmp(sniffuserinfo.sourceport,"*");
  89.    strcmp(sniffuserinfo.destip,"*");
  90.    strcmp(sniffuserinfo.destport,"*");
  91.    strcmp(sniffuserinfo.SnifferDataPath,"none");
  92.    sniffuserinfo.LogData=0;

  93.    for(i=1;i<argc;i++){   
  94.            if(strcmp(argv[i],"-si")==0) strcpy(sniffuserinfo.sourceip,argv[++i]);
  95.            if(strcmp(argv[i],"-sp")==0) strcpy(sniffuserinfo.sourceport,argv[++i]);
  96.            if(strcmp(argv[i],"-di")==0) strcpy(sniffuserinfo.destip,argv[++i]);
  97.            if(strcmp(argv[i],"-dp")==0) strcpy(sniffuserinfo.destport,argv[++i]);
  98.           if(strcmp(argv[i],"-o")==0){
  99.            strcpy(sniffuserinfo.SnifferDataPath,argv[++i]);
  100.                  sniffuserinfo.LogData=1;
  101.                  }

  102.            }
  103.    if(!strcmp(sniffuserinfo.sourceip,"*"))
  104.       strcpy(sniffuserinfo.sourceip,"all");
  105.    if(!strcmp(sniffuserinfo.sourceport,"*"))
  106.       strcpy(sniffuserinfo.sourceport,"all");
  107.      else _sport=atoi(sniffuserinfo.sourceport);
  108.    if(!strcmp(sniffuserinfo.destip,"*"))
  109.       strcpy(sniffuserinfo.destip,"all");
  110.    if(!strcmp(sniffuserinfo.destport,"*"))
  111.       strcpy(sniffuserinfo.destport,"all");
  112.      else _dport=atoi(sniffuserinfo.destport);
  113.    if((sockfd=BornRawSocket())<=0)
  114.     return 0;
  115.    if(sniffuserinfo.LogData)
  116.     {
  117.       if((file=fopen("sniffuserinfo.sourceport","wt"))==NULL)
  118.      {printf("\ncan not open file!\n\n");
  119.       return 0;
  120.      }
  121.     }
  122.    while(1)
  123.     {bzero(&from,sizeof(from));
  124.      fromlen=sizeof(from);
  125.    if((size=recv(sockfd,data,sizeof(data),0))==-1)
  126.               continue;
  127.      time(&timep);
  128.      p=localtime(&timep);
  129.       buffip=(struct iphdt *)(data);
  130.       addr.s_addr=buffip->saddr;
  131.       strcpy(result.sip,inet_ntoa(addr));
  132.       addr.s_addr=buffip->daddr;
  133.       strcpy(result.dip,inet_ntoa(addr));
  134.       if(strcmp(sniffuserinfo.sourceip,"all")!=0)
  135.         if(strcmp(result.sip,sniffuserinfo.sourceip)!=0)     
  136.           continue;
  137.       if(strcmp(sniffuserinfo.destip,"all")!=0)
  138.         if(strcmp(result.dip,sniffuserinfo.destip)!=0)     
  139.           continue;
  140.       result.totalen=buffip->totalen;
  141.      switch(buffip->proto)
  142.      {   
  143.           case 6: strcpy(result.protocol,"TCP");
  144.                   bufftcp=(struct tcphdr *)(data+20);
  145.                   result.sport=ntohs(bufftcp->sport);
  146.                   result.dport=ntohs(bufftcp->dport);
  147.                   if(strcmp(sniffuserinfo.sourceip,"all")!=0)
  148.                       if(_sport!=result.sport)
  149.                             break;
  150.                   if(strcmp(sniffuserinfo.destip,"all")!=0)
  151.                       if(_dport!=result.dport)
  152.                             break;
  153.                   fprintf(file,"%d-%d-%d %s%d:%d:%2d %-6s%-17s%-6d---->  %-17s%-6d%5d Bytes\n",(1900+p->tm_year),( 1+p->tm_mon),( p->tm_mday),wday[p->tm_wday],p->tm_hour, p->tm_min, p->tm_sec,result.protocol,result.sip,result.sport,result.dip,result.dport,(result.totalen*4-20));
  154.                    break;
  155.           case 17: strcpy(result.protocol,"UDP");
  156.                   buffudp=(struct udphdr *)(data+20);
  157.                   result.sport=ntohs(buffudp->sport);
  158.                   result.dport=ntohs(buffudp->dport);
  159.                   if(strcmp(sniffuserinfo.sourceport,"all")!=0)
  160.                       if(_sport!=result.sport)
  161.                             break;
  162.                   if(strcmp(sniffuserinfo.destport,"all")!=0)
  163.                       if(_dport!=result.dport)
  164.                             break;
  165.                   fprintf(file,"%d-%d-%d %s%d:%d:%2d %-6s%-17s%-6d---->  %-17s%-6d%5d Bytes\n",(1900+p->tm_year),( 1+p->tm_mon), (p->tm_mday),wday[p->tm_wday],p->tm_hour, p->tm_min, p->tm_sec,result.protocol,result.sip,result.sport,result.dip,result.dport,(result.totalen*4-20));
  166.                    break;                                   
  167.           case 1: strcpy(result.protocol,"ICMP");
  168.                   bufficmp=(struct icmphdr *)(data+20);
  169.                   result.sport=0;
  170.                   result.dport=0;
  171.                   if(strcmp(sniffuserinfo.sourceport,"all")!=0)
  172.                       if(_sport!=result.sport)
  173.                             break;
  174.                   if(strcmp(sniffuserinfo.destport,"all")!=0)
  175.                       if(_dport!=result.dport)
  176.                             break;
  177.                   fprintf(file,"%d-%d-%d %s%d:%d:%2d %-6s%-17s%-6d---->  %-17s%-6d%5d Bytes\n",(1900+p->tm_year),( 1+p->tm_mon),( p->tm_mday),wday[p->tm_wday],p->tm_hour, p->tm_min, p->tm_sec,result.protocol,result.sip,result.sport,result.dip,result.dport,(result.totalen*4-20));
  178.                    break;         
  179.          default : break;
  180.           }
  181.      }
  182. fclose(file);
  183.       }


  184. int BornRawSocket()
  185.   {
  186.      int Socket;
  187.      int rcvtimeout=5000;
  188.      struct sockaddr_in localaddr;
  189.      struct timeval _time,*ptime;
  190.      _time.tv_sec=10;
  191.      _time.tv_usec=0;
  192.      ptime=&_time;
  193.      Socket=socket(PF_INET,SOCK_RAW,IPPROTO_RAW);
  194.      if(Socket<=0)
  195.          {printf("socket error");
  196.           return 0;
  197.            }
  198.      localaddr.sin_family=AF_INET;
  199.      localaddr.sin_port=htons(6000);
  200.      localaddr.sin_addr.s_addr=inet_addr(GetLocalIp());
  201.      if(bind(Socket,(const struct sockaddr *)&localaddr,sizeof(localaddr))==-1)
  202.       {
  203.         printf("bind error");
  204.          return 0;
  205.       }
  206.      return Socket;
  207.   }

  208. char *GetLocalIp(){
  209.          struct hostent *hp = NULL;
  210.         
  211.          char szName[255] = {0};
  212.          char *pLocalIP = NULL;
  213.       
  214.          if (gethostname(szName, sizeof(szName)) == -1)
  215.          {
  216.                  printf("gethostname error");
  217.                  return 0;
  218.          }
  219.         
  220.          hp = gethostbyname(szName);
  221.          if (NULL == hp)
  222.          {
  223.                  printf("gethostbyname error");
  224.                  return 0;
  225.          }
  226.          pLocalIP = inet_ntoa(*(struct in_addr *)*(hp->h_addr_list));

  227.          return pLocalIP;
  228. }
复制代码


[ 本帖最后由 ruoyisiyu 于 2007-10-10 08:48 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2007-10-10 10:14 |只看该作者
谢谢各位的帮忙
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP