#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. 11-看图理解数据结构与算法系列(B树的删除)

    删除操作 删除操作比较复杂,主要是因为删除的项可能在叶子节点上也可能在非叶子节点上,而且删除后可能导致不符合B树的规定,这里暂且称之为导致B树不平衡,于是要进行一些合并.左旋.右旋等操作,使之符合B树 ...

  2. Hermite (埃尔米特)曲线

    Hermite 曲线 已知曲线的两个端点坐标P0.P1,和端点处的切线R0.R1,确定的一条曲线. 参数方程 1. 几何形式 2. 矩阵形式 3. 推导 例子分析 如上图有四个点,假如P0.P2是端点 ...

  3. JQuery_九大选择器

    JQuery_九大选择器-----https://blog.csdn.net/pseudonym_/article/details/76093261

  4. [luoguP1970] 花匠(DP)

    传送门 n2 过不了惨啊 70分做法 f[i][0] 表示第 i 个作为高的,的最优解 f[i][0] 表示第 i 个作为低的,的最优解 (且第 i 个一定选) 那么 f[i+1][1]=max(f[ ...

  5. 【IntelliJ】IDEA使用--字体、编码和基本设置

    IDEA这么高端的工具之前只是断断续续使用了一下,因为项目的开发都是在eclipse上,每次学习IDEA的使用都得上网搜索半天,今天自己整理一下,方便以后查阅. IDEA版本15.0.4 字体 界面字 ...

  6. gulp基本语法

    pipe:用管道输送 1.gulp.src(glops[, options]) 输出(Emits)符合所提供的匹配模式(glob)或者匹配模式的数组(array of globs)的文件. 将返回一个 ...

  7. 洛谷——P1007 独木桥

    P1007 独木桥 题目背景 战争已经进入到紧要时间.你是运输小队长,正在率领运输部队向前线运送物资.运输任务像做题一样的无聊.你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在 ...

  8. SpringBoot使用logback自定义配置时遇到的坑 --- 在 /tmp目录下自动生成spring.log文件

    问题描述 SpringBoot项目使用logback自定义配置后,会在/tmp/ 目录下生成 spring.log的文件(如下图所示). 解决方案 通过各种资料的搜索,最终发现问题的所在(logbac ...

  9. Vue中对获取的数据进行重新排序

    var Enumerable = require('linq'); // 使用linq 按照RegisterID排序listJust是自己定义的数组,来接收数据.listJust: [] addDat ...

  10. Scala-LIST/Tuple/Map

    环境: CentOS 6.3 LIST(列表) 代码: $ cat list.scala var mylist = List(1,2,3) println(mylist) var mylist1 = ...