libnids 显示UDP数据报,编译,运行,正确。

#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();

}

时间: 2024-10-17 11:24:46

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

cmd控制台中Java编译运行,不能显示汉字的问题

由于Java采用的是utf-8的编码方式,而cmd中默认的编码是GBK,因此,在命令提示符窗口编译运行java程序时,程序中的汉字就会以乱码的形式显示出来,要解决此问题,有两种方法: 1.使用chcp命令修改cmd控制台的字符编码方式为utf-8,具体方法可google或百度关键词“cmd utf-8”,这里不再累述. 2.使用第一种方式,显示比较多的汉字时,还是会出现乱码和显示不全的现象,甚至编译都无法通过.这里介绍的第二种方式,经笔者测试比较完美.在windows简体中文系统中,ANSI编码

解决linux/Ubuntu下Qt creater 界面程序在编译运行后无法显示中文或中文乱码问题!

本文解决的主要是界面程序编译运行后无法显示中文的问题,如果在creater 中无法输入中文,下载个IBus或者搜狗之类的中文输入法即可解决! 首先说乱码问题,这个很好解决: 如果是在linux下打开Windows下的项目出现乱码,选择编码为"GB2312"即可! 现在主要来说说程序运行后无法显示中文或者出现乱码的情况,被这个问题困扰了很久,网上看了很多资料贴子都没有解决,所有该添加的都添加了都没办法, http://bbs.csdn.net/topics/390610841?page=

java 文件编译运行

对于一个新手来说,使用命令行进行代码的检测与运行是很必要的,今天来说: 1,使用win键盘键+R键进入运行界面,(或者开始找到运行),输入cmd进入命令行界面. 2,使用 cd +文件所在文件夹,进入程序所在文件夹. 3,使用javac编译程序,javac+文件名<需要带后缀,如.java>,编译要是正确不会出现显示,要是有错误按照错误回去修改程序. 4,使用java +文件名<不需要带后缀,如.java>运行,查看运行结果. 常见错误有:环境变量配置不正确,javac编译出错,检

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

本文大纲 一.开篇 二.JDK下载 三.JDK安装 四.环境配置 五.初识Java编译 六.Java与Javac 七.第一个Java程序 八.总结 九.参考资料 一.开篇 通过对之前Java之路的了解之后,相信初学者们都对Java有了一个比较深印象的了解了.但是事情不能总停留在理论层面,还得多多实现,才能见真知.我觉得,学习一样东西,要遵循理论--实践--理论这样一个套路.先了解事情的基本概念,弄懂基本概念后,要想方设法的用到生活的点点滴滴上,这样能加深理论的记忆以及发现自己的盲点.在重复的实践

使用Eclipse编译运行MapReduce程序 Hadoop2.6.0_Ubuntu/CentOS

文章来源:http://www.powerxing.com/hadoop-build-project-using-eclipse/ 使用Eclipse编译运行MapReduce程序 Hadoop2.6.0_Ubuntu/CentOS 本教程介绍的是如何在 Ubuntu/CentOS 中使用 Eclipse 来开发 MapReduce 程序,在 Hadoop 2.6.0 下验证通过.虽然我们可以使用命令行编译打包运行自己的MapReduce程序,但毕竟编写代码不方便.使用 Eclipse,我们可以

[Android Pro] 告别编译运行 ---- Android Studio 2.0 Preview发布Instant Run功能

reference to : http://www.cnblogs.com/soaringEveryday/p/4991563.html 以往的Android开发有一个头疼的且拖慢速度的问题,就是你每改一行代码要想看到结果必须要编译运行到手机或者模拟器上,而且需要从头(可能是登录界面)一直点击到你修改的界面为止.开发一个完整的Android App你可能要经历无数个重复编译运行的过程,严重的拖慢了开发进度. 最近React Native for Android可谓是解决了这个问题,修改代码可以直

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

最近写代码的过程中,除了写Java时用的Eclipse.在Linux下编辑的Vi之外,有时也会用EditPlus打开一些文件,如配置文件.日志文件.脚本等.个人觉得EditPlus在很多场景下比较好用,也很轻量,其中有一些有用的功能简单总结了一下. 1.远程编辑 通过Sftp编辑远程文件,除了用SftpDrive直接把服务器文件系统映射成本地磁盘外,还可以利用EditPlus自身支持的FTP功能.从编码的角度,后者更方便些,设置好后,每次需要编辑时,不必打开SftpDrive.从“计算机”中打开

Sublime配置C和C++编译运行环境

最近在学习<深入理解计算机系统>,里面的代码是在Linux环境下的C语言编写,由于采用gcc编译环境,为方便本人学习,特在Windows环境下载了MinGM,并且配合Sublime编辑器,发挥很大功能,能够实现简单C程序的编译,运行和反编译查看汇编代码. 1.安装MinGW 在安装Dev C++的过程中自动安装了MinGW,也可以单独下载安装MinGW. 2.配置环境变量 在MinGW bin文件中有很多命令,为了使这些可执行命令在控制台直接使用,需要配置环境变量,根据MinGW的文件路径 (

Java初学者:java是如何在命令行下编译运行程序的

我们上文书说到,我们首先安装Java,然后设置Java环境,然后编译运行了一个简单的Java程序,在命令行模式下显示了一个“Hello baby”.那么,为什么呢?发生了什么呢? 首先,下载安装Java就不用问为什么了对吧?所谓巧妇难为无米之炊,没有Java却想用,这不可能的. 其次,为什么我们要那样设置Java的运行环境呢? 因为,目前为止,我只是想在命令行下编译运行java程序,这样一来,你就需要让命令行模式识别java的命令.而命令行下能自动识别的命令,必须我们手动的把命令的路径添加进去.