#include<stdio.h>
#include<nids.h>
#include<string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include<stdlib.h>
#include<netinet/ip.h>
#include<arpa/inet.h>
#include<netinet/tcp.h>
#include<netinet/udp.h>
char ascii_string[10000];
char * char_to_ascii(char c)
{
    char * string;
    ascii_string[0]=0;
    string=ascii_string;

if(isgraph(c))
    {
        *(string++)=c;
    }
    else if(c==' ')
    {
        *(string++)=c;
    }
    else if(c=='\n'||c=='r')
    {
        *(string++)=c;
    }
    else
    {
    *(string++)='.';
    }
  *string=0;
  return ascii_string;
}
void udp_callback2(struct ip*iph)
{
    struct udphdr * udp_protocol;
    u_short length;
    u_short udp_sport;
    u_short udp_dport;
    udp_protocol=(struct udphdr *)(iph+20);
    udp_sport=ntohs(udp_protocol->uh_sport);
    udp_dport=ntohs(udp_protocol->uh_dport);
    length=ntohs(udp_protocol->uh_ulen);
    printf("<----------UDP协议首部相关信息---------->\n");
    printf("UDP首部长度为:%d\n",length);
    printf("UDP的源端口为:%d\n",udp_sport);
    printf("UDP的目的端口为:%d\n",udp_dport);
    switch(udp_dport)
    {
    case 138: printf("UDP上层协议为NETBIOS数据报服务\n");break;
    case 137: printf("UDP上层协议为NETBIOS名字服务\n");break;
    case 139: printf("UDP上层协议为NETBIO会话服务\n");break;
    case 53 :  printf("UDP上层协议为域名服务\n");break;
    default :break;
    }
}
void ip_callback(struct ip*iph )
{
   u_char packet_content;
    struct iphdr * ip_protocol;
    u_int header_length;
    struct in_addr ip_saddress;
    struct in_addr ip_daddress;
    ip_saddress.s_addr=ip_protocol->saddr;
    ip_daddress.s_addr=ip_protocol->daddr;
    ip_protocol=(struct iphdr *)(iph);
    header_length=ip_protocol->ihl*4;
    printf("<----------IP首部相关信息---------->\n");
    printf("IP 版本号为:%d\n",ip_protocol->version);
    printf("IP 首部长度为:%d\n",header_length);
    printf("IP 总长度为:%d\n",ntohs(ip_protocol->tot_len));
    printf("IP 上层协议类型为:%d\n",ip_protocol->protocol);
    switch(ip_protocol->protocol)
    {
    case 6: printf("IP上层协议为:TCP\n");break;
    case 17: printf("IP上层协议为:UDP\n");break;
    case 1: printf("IP上层协议为:ICMP\n");break;
    default: break;
    }
    printf("源IP地址为:%s\n",inet_ntoa(ip_saddress));
    printf("目的IP地址为:%s\n",inet_ntoa(ip_daddress));
    switch(ip_protocol->protocol)
    {
    case 17: udp_callback2(iph);break;
    default: break;
    }
}
void udp_callback(struct tuple4*addr,char *buf,int len,struct ip*iph)
{
    int i;
    char address_string[1024];
    char content[65535];
    char content_urgent[65535];
     strcpy(address_string,inet_ntoa(*((struct in_addr *)&(addr->saddr))));
     sprintf(address_string+strlen(address_string)," : %d",addr->source);
     strcat(address_string,"<---->");
     strcat(address_string,inet_ntoa(*((struct in_addr *)&(addr->daddr))));
     sprintf(address_string+strlen(address_string)," : %d",addr->dest);
     strcat(address_string,"\n");
     printf("**********************************开始**********************************\n");
     printf("%s",address_string);
     ip_callback(iph);
     printf("------------------UDP数据包负载内容---------------\n");
     for(i=0;i<len;i++)
     {
         if(i%50==0)
         {
             printf("\n");
         }
         printf("%s",char_to_ascii(buf[i]));
       }
     printf("\n");
     printf("***********************************结束*********************************\n");
     printf("\n");
     return;
}
void main()
{

struct nids_chksum_ctl temp;
        temp.netaddr = 0;
        temp.mask = 0;
        temp.action = 1;
        nids_register_chksum_ctl(&temp,1);
        nids_params.device="wlan0";
        nids_init();
        nids_register_udp(udp_callback);
        nids_run();

}

libnids 显示UDP数据报,编译,运行,正确。的更多相关文章

  1. 1   开发一个注重性能的JDBC应用程序不是一件容易的事. 当你的代码运行很慢的时候JDBC驱动程序并不会抛出异常告诉你。   本系列的性能提示将为改善JDBC应用程序的性能介绍一些基本的指导原则,这其中的原则已经被许多现有的JDBC应用程序编译运行并验证过。 这些指导原则包括:    正确的使用数据库MetaData方法    只获取需要的数据    选用最佳性能的功能    管理连

    1 开发一个注重性能的JDBC应用程序不是一件容易的事. 当你的代码运行很慢的时候JDBC驱动程序并不会抛出异常告诉你. 本系列的性能提示将为改善JDBC应用程序的性能介绍一些基本的指导原则,这其中的 ...

  2. linux下编译运行驱动

    linux下编译运行驱动 嵌入式linux下设备驱动的运行和linux x86 pc下运行设备驱动是类似的,由于手头没有嵌入式linux设备,先在vmware上的linux上学习驱动开发. 按照如下方 ...

  3. Java之路——环境配置与编译运行

    本文大纲 一.开篇 二.JDK下载 三.JDK安装 四.环境配置 五.初识Java编译 六.Java与Javac 七.第一个Java程序 八.总结 九.参考资料 一.开篇 通过对之前Java之路的了解 ...

  4. JAVA 基础开发环境 vscode 搭建 Windows下VSCode编译运行简单java

    JAVA 基础开发环境 vscode 搭建 来源 https://www.cnblogs.com/freewsf/p/7744728.html 对于使用 Visual Studio Code 的 Ja ...

  5. Java环境配置与编译运行详解

    这篇文章主要为大家详细介绍了Java环境配置与编译运行的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 一.开篇 通过对之前Java之路的了解之后,相信初学者们都对Java有了一个比较深印 ...

  6. EditPlus远程编辑、语法高亮、编译运行源代码设置

    最近写代码的过程中,除了写Java时用的Eclipse.在Linux下编辑的Vi之外,有时也会用EditPlus打开一些文件,如配置文件.日志文件.脚本等.个人觉得EditPlus在很多场景下比较好用 ...

  7. 如何用javac 和java 编译运行整个Java工程 (转载)【转】在Linux下编译与执行Java程序

    如何用javac 和java 编译运行整个Java工程 (转载)  http://blog.csdn.net/huagong_adu/article/details/6929817 [转]在Linux ...

  8. 告别编译运行 ---- Android Studio 2.0 Preview发布Instant Run功能

    以往的Android开发有一个头疼的且拖慢速度的问题,就是你每改一行代码要想看到结果必须要编译运行到手机或者模拟器上,而且需要从头(可能是登录界面)一直点击到你修改的界面为止.开发一个完整的Andro ...

  9. vim颜色选择+按<F9>自动编译运行+其他基本配置(ubuntu)

    (以下是ubuntu上的配置........ 但如果你是在window上的,直接用一下配置吧(懒得介绍了)=.= syntax on filetype indent plugin on set rul ...

随机推荐

  1. LeetCode(46)Permutations

    题目 Given a collection of numbers, return all possible permutations. For example, [1,2,3] have the fo ...

  2. 集训第六周 古典概型 期望 D题 Discovering Gold 期望

    Description You are in a cave, a long cave! The cave can be represented by a 1 x N grid. Each cell o ...

  3. 一个IT工薪族的4年奋斗成果

     关于标题:为了方便传播,使用了"最简化"的一段. 过段时间,考虑改为"大学毕业4年-回顾和总结(11):一个IT工薪族的4年奋斗成果(2012年6月17日~2016年6 ...

  4. fielddata breaker与cache size

    breaker的估算,是根据语句以及上层的结果数,加上固定的值,不准确. cache.size是cache到结果的size,准确. 所以,配置breaker不能拦截占用内存的聚合查询,而配置cache ...

  5. nyoj 2 括号配对问题(stack)

    括号配对问题 时间限制:3000 ms  |            内存限制:65535 KB 难度:3   描述 现在,有一行括号序列,请你检查这行括号是否配对.   输入 第一行输入一个数N(0& ...

  6. 洛谷P1257 平面上的最接近点对

    n<=10000个点,求欧几里德距离最小的一对点. 经典分治,把这些点按x排序,分成两半,每边分别算答案,答案是左边的最小,右边的最小,左右组起来的最小三者的最小.发现只有左右组的有点难写. 假 ...

  7. java中文乱码问题的处理方式

    URL访问java时. 注意: URL: 编码二次 URLEncoder.encode(URLEncoder.encode(searchKey, "utf-8"),"ut ...

  8. 快速幂取模模板 && 51nod 1013 3的幂的和

    #include <iostream> #include <cstdio> #include <cmath> #include <vector> #in ...

  9. csu1365 Play with Chain

    很显然的splay,第一次用splay操作区间...我实在佩服这个targan大佬,居然搞出这么牛逼的平衡树,调了大概5个小时终于搞定了.. #include<cstdio> #inclu ...

  10. Android GIS开发系列-- 入门季(8) Json与Geometry的相互转换

    在Android中json数据十分普遍,也很实用,在Arcgis中也同样支持Json数据,Json与Geometry可以相互转换,达到我们想要的数据. 一.Geometry转换成Json数据 这个实现 ...