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();
}
最新文章
- Android中使用GridView和ImageViewSwitcher实现电子相册简单功能
- jquery定时滑出可最小化的底部提示层
- android 网络请求库的比较
- TortoiseSVN安装以及淘宝 TAE SDK 开发环境的搭建
- modifiedvalues 主程序测试
- 【python PIL学习】给照片打水印
- 关于PATH_INFO SCRIPT_NAME SCRIPT_FILENAME REDIRECT_URL 详解
- 【HDOJ】3311 Dig The Wells
- 对Verilog 初学者比较有用的整理(转自它处)
- Web存储(Web Storage)介绍
- Codeforces Round #246 (Div. 2) D. Prefixes and Suffixes(后缀数组orKMP)
- iOS搜索框UISearchBar
- CSS篇(上)
- 【心得】Lattice Diamond 后端约束实战小结
- Class_fourh_异常总结
- FileFilter文件过滤器
- JS面试典型常见问题与解答
- pyspider爬取数据存入es--1.安装驱动
- 了不起的Node.js--之二
- thinkphp中I()方法的详解
热门文章
- <;struct、union、enum>;差异
- Quartz.Net 学习之路01 安装Quartz.Net
- WebLoad 解析服务器返回的XML格式内容
- [SPOJ8222]Substrings
- BBS+Blog项目代码
- 【BZOJ3110】K大数查询(权值线段树套线段树+标记永久化,整体二分)
- input range音乐进度条
- HDU 4416 (后缀自动机)
- Spring Boot 2.1.5 正式发布,1.5.x 即将结束使命!
- ETL增量单表同步简述_根据timestamp增量