利用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. ...
随机推荐
- Bootstrap 栅格系统
1.简介 Bootstrap内置了一套响应式.移动设备优先的流式栅格系统,随着屏幕设备或视口(viewport)尺寸的增加,系统会自动分为最多12列.它包含了易于使用的预定义classe,还有强大的m ...
- Hyper-V初涉:功能的添加与虚拟机的创建
Hyper-V是微软提供的一款高效率的虚拟化管理软件,在早期的Windows服务器中配备Hyper-V组件,Windows 8是首次将企业用Hyper-V集成在个人系统中,可见虚拟化技术的发展之迅速. ...
- [Leetcode]Palindrome Number
Determine whether an integer is a palindrome. Do this without extra space. 这题貌似解法挺多,直接用简单的把数倒置,没有考虑数 ...
- 张洋:浅析PageRank算法
本文引自http://blog.jobbole.com/23286/ 很早就对Google的PageRank算法很感兴趣,但一直没有深究,只有个轮廓性的概念.前几天趁团队outing的机会,在动车上看 ...
- python easy_install pip django
1. install python (2.7.8) 2. set PATH, add python27 3. python easy_install.py 4. easy_install pip 5. ...
- 【转】C#Winform程序如何发布并自动升级(图解)
有不少朋友问到C#Winform程序怎么样配置升级,怎么样打包,怎么样发布的,在这里我解释一下打包和发布关于打包的大家可以看我的文章C# winform程序怎么打包成安装项目(图解)其实打包是打包,发 ...
- iOS集成丁香园DXY OAuth 登陆 swift代码示例
问:iOS集成OAuth登陆分几步? 答:和把大象放冰箱里一样. 第一步:打开webview,跳转到登陆页面: let url = "https://auth.dxy.cn/conn/oau ...
- 解决VS2008 开发Windows Mobile 项目生成速度慢的问题(转)
最近用VS2008开发Windows Mobile程序,使用C#..NET Compact Framework,发现项目生成速度比较慢.用VS2008打开项目后,开始一段时间生成速度还能忍受,时间一长 ...
- UWP?UWP! - Build 2015有些啥?(1)
UWP?UWP! - Build 2015有些啥? Build 2015圆满落幕了,不知大家有多少人刷夜看了直播呢?不管怎么说,想必各位都很好奇在这场微软开发者盛宴上,Microsoft又发布了什么令 ...
- 那些年使用Hive踩过的坑
1.概述 这个标题也是用血的教训换来的,希望对刚进入hive圈的童鞋和正在hive圈爬坑的童鞋有所帮助.打算分以下几个部分去描述: Hive的结构 Hive的基本操作 Hive Select Hive ...