利用libpcap打印ip包
#include <stdio.h>
#include <pcap.h>
#include <time.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <iostream> using namespace std; //IP层数据包格式
typedef struct
{
int header_len:;
int version:;
u_char tos:;
int total_len:;
int ident:;
int flags:;
u_char ttl:;
u_char proto:;
int checksum:;
u_char sourceIP[];
u_char destIP[];
}IPHEADER; void callback(u_char* user,const struct pcap_pkthdr* header,const u_char* pkt_data); int main(int argc, char **argv)
{
char *device = NULL;
char errbuf[];
pcap_t *pcap;
int link_data; if((device = pcap_lookupdev(errbuf)) == NULL)
{
perror(errbuf);
return ;
} pcap = pcap_open_live(device, , , , errbuf);
if(pcap == NULL)
{
perror(errbuf);
return ;
} if((link_data = pcap_datalink(pcap)) == -)
{
fprintf(stderr,"pcap_link_data: %s\n",pcap_geterr(pcap));
return ;
} cout<<"开始抓包"<<endl;
pcap_loop(pcap, -, callback, NULL); return ;
} void callback(u_char* user,const struct pcap_pkthdr* header,const u_char* pkt_data)
{
cout<<"\t\t抓到一个包"<<endl;
cout<<"-------------------------------------------------"<<endl;
//解析数据包IP头部
if(header->len>=){
IPHEADER *ip_header=(IPHEADER*)(pkt_data+);
//解析协议类型
cout<<"|版本 "<<ip_header->version<<"|首部长度"<<ip_header->header_len*<<"字节|\t\t|"
"总长度"<<ip_header->total_len<<"字节|"<<endl;
cout<<"-------------------------------------------------"<<endl;
cout<<"|\t\t\t|\t|\t\t|"<<endl;
cout<<"-------------------------------------------------"<<endl;
cout<<"|ttl "<<int(ip_header->ttl)<<"\t|协议 ";
switch(ip_header->proto)
{
case :
cout<<"ICMP";
break;
case :
cout<<"IGMP";
break;
case :
cout<<"TCP ";
break;
case :
cout<<"UDP ";
break;
case :
cout<<"IPv6";
break;
default:
cout<<"IPv4";
}
cout<<"\t|首部校验和 "<<ip_header->checksum<<"\t|"<<endl;
cout<<"-------------------------------------------------"<<endl;
printf("|\t\t源地址 : %d.%d.%d.%d\t\t|\n",\
ip_header->sourceIP[],ip_header->sourceIP[],ip_header->sourceIP[],ip_header->sourceIP[]);
cout<<"-------------------------------------------------"<<endl;
printf("|\t\t目的地址 : %d.%d.%d.%d\t\t|\n",\
ip_header->destIP[],ip_header->destIP[],ip_header->destIP[],ip_header->destIP[]);
cout<<"-------------------------------------------------"<<endl;
cout<<endl;
}
}

利用libpcap打印ip包的更多相关文章
- 利用libpcap抓取数据包
转载自:http://blog.csdn.net/tennysonsky/article/details/44811899 概述 libpcap是一个网络数据包捕获函数库,tcpdump就是以libp ...
- Java网络编程:利用apache的HttpClient包进行http操作
本文介绍如何利用apache的HttpClient包进行http操作,包括get操作和post操作. 一.下面的代码是对HttpClient包的封装,以便于更好的编写应用代码. import java ...
- C# 利用SharpPcap实现网络包捕获嗅探
本文是利用SharpPcap实现网络包的捕获的小例子,实现了端口监控,数据包捕获等功能,主要用于学习分享. 什么是SharpPcap? SharpPcap 是一个.NET 环境下的网络包捕获框架,基于 ...
- TCP 、UDP、IP包的最大长度
1.概述 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层. 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Da ...
- 【Android】利用Fiddler进行抓包详解教程。抓取接口以及数据,可以抓真实安卓手机或者模拟器。
大家都知道抓包的方法很多.我这里给大家介绍介绍一种,利用fiddler进行抓包,当然比如Wireshark也可以抓包,我们这里不做介绍.我这里演示的是fiddler+天天模拟器,当然真实安卓手机也是一 ...
- requests利用selenium,代理Ip,云打码,验证码抠图操作 爬取搜狗微信公众号内容
爬取思路,爬取搜狗微信公众号内容,爬取第一层url时请求太快出现验证码,我这里用的蘑菇云代理,并在程序中我判断什么情况下是否+代理,做到合理运用代理ip.爬取第二层url时验证码出现次数更严重(和第一 ...
- iptables - IP包过滤器管理
总览 iptables -ADC 指定链的规则 [-A 添加 -D 删除 -C 修改] iptables - RI iptables -D chain rule num[option] iptable ...
- 无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)
1.activity的生命周期 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: (1)Activity的完整生命周期 自第一次调用onCrea ...
- IP包格式
网络层提供的服务就是在不同网段之间转发数据包. Ip包结构 1,格式(每行4byte*5) 2,版本 V4 V6 3,首部长度 20(固定)+可变长度 ,区分服务 Win2008开始:gpedit. ...
随机推荐
- Android最大可运行内存
int maxMemory = (int) Runtime.getRuntime().maxMemory();
- Unity 通过 www 下载 assetbundle , 在 iOS9 设备无法下载的问题
我们项目是通过 www 下载 Assetbundle 来实现热更新的, 在 iOS 8上一切正常,但在 iOS9 设备上发现无法下载,跟踪调试发现以下错误信息 “App Transport Secur ...
- phpcms V9二次开发之联动菜单筛选 包括box字段的多选 单选 筛选教程
{php $theurl = "index.php?m=content&c=index&a=lists&catid=$catid";} {php $bran ...
- 【OC基础语法考试】
OC基础语法已经全部学完,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.接下来我会总结前面的OC基础语法,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请 ...
- CSS浮动(float,clear)通俗讲解
首先要知道,div是块级元素,在页面中独占一行,自上而下排列,也就是传说中的流.如下图: 可以看出,即使div1的宽度很小,页面中一行可以容下div1和div2,div2也不会排在div1后边,因为d ...
- android 如何结束一个线程
总结: 1 不推荐直接调用onstop()强制结束,,因为不安全 2 run()比较短暂,执行完毕会自动停止 3 在run()设置一个flag标识,满足条件才执行; 4 通过sleep()捕获异常,在 ...
- Intellij IDEA Java web 项目搭建
Java web 项目搭建 简介 在上一节java web环境搭建中,我们配置了开发java web项目最基本的环境,现在我们将采用Spring MVC+Spring+Hibernate的架构搭建一个 ...
- 分享:用 NDK C++做底层开发的Android 浏览器,纯免费,无广告
分享:用 NDK C++做底层开发的Android 浏览器,纯免费,无广告 操作简单,傻瓜一看就会 无毒.无广告.无负作用,完全免费 下载地址1:http://awdjcfeizb.l33.yunpa ...
- React学习笔记---项目构建
简介 ReactJs由于有FB的支持,得到了社区的极大关注,同时由于ReactJs只希望专一的做好View层次上的工作,所以本身并没有涉及很多周边工具. 今天要介绍一款工具,同时包含一个构建项目模板的 ...
- objective-c(内存管理)
本文主要记录objective-c 内存管理的知识点: 1.objective-c的对象都是分配内存在堆上,与C的mallock和C++的new类似,只有int等系统变量分配内存在栈上: 2.obje ...