#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. selenium实战演练

    利用selenium以及pyquery,爬取当当网图书信息,并且将数据存入文件以及MongoDB数据库中. 配置文件: key="python" MONGO_URL='localh ...

  2. Matplotlib中的颜色

    使用matplotlib中会遇到选择颜色的问题,很多人会觉得自带的matlab风格的颜色不好看.好在Matplotlib已经预见到了这个问题,除了支持最基本的matlab传统颜色之外,还支持很多种颜色 ...

  3. LeetCode(33)Search in Rotated Sorted Array

    题目 Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 m ...

  4. 17-看图理解数据结构与算法系列(NoSQL存储-LSM树)

    关于LSM树 LSM树,即日志结构合并树(Log-Structured Merge-Tree).其实它并不属于一个具体的数据结构,它更多是一种数据结构的设计思想.大多NoSQL数据库核心思想都是基于L ...

  5. next_permitation

    了解一个C++ STL的函数 next_permitation 可用于生成全排列 如下例子 #include <iostream> #include <stdio.h> #in ...

  6. Redis持久化方式--RDB和AOF

    转载于:https://www.cnblogs.com/xingzc/p/5988080.html Redis提供了RDB持久化和AOF持久化 RDB机制的优势和略施 RDB持久化是指在指定的时间间隔 ...

  7. USB2.0的最高传输速率

    USB2.0除了拥有USB1.1中规定的1.5Mbps和12Mbps两个传输模式以外,还增加了480Mbps高速数据传输模式(注:第二版USB2.0的传输速率将达800Mbps,最高理想值1600Mb ...

  8. 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体server笔记(十)

    第十部分 -- 开发板測试 前几天已经分别将nginx和ffmpeg移植到了开发板上面.可是还是没有进行不论什么的測试并不知道移植后的效果怎样. 今天分别做了两个測试.证明移植的结果是可用的. 1.測 ...

  9. chassis & power

    机箱电源 ★ Main board ★ Voltage, connector ★ Hole ★ Ports ★ AT:12``*13.8`` or 12``*13``  30.5cm*33cm ★ B ...

  10. 手动安装Firefox Linux

    (2015-06-05 17:22:19)[编辑][删除] 转载▼ 标签: 股票 Firefox 下载文件以.tar和.bz2格式保存,必须从这些压缩包中提取文件.不想删除当前安装的 Firefox, ...