#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包的更多相关文章

  1. 利用libpcap抓取数据包

    转载自:http://blog.csdn.net/tennysonsky/article/details/44811899 概述 libpcap是一个网络数据包捕获函数库,tcpdump就是以libp ...

  2. Java网络编程:利用apache的HttpClient包进行http操作

    本文介绍如何利用apache的HttpClient包进行http操作,包括get操作和post操作. 一.下面的代码是对HttpClient包的封装,以便于更好的编写应用代码. import java ...

  3. C# 利用SharpPcap实现网络包捕获嗅探

    本文是利用SharpPcap实现网络包的捕获的小例子,实现了端口监控,数据包捕获等功能,主要用于学习分享. 什么是SharpPcap? SharpPcap 是一个.NET 环境下的网络包捕获框架,基于 ...

  4. TCP 、UDP、IP包的最大长度

    1.概述 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层. 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Da ...

  5. 【Android】利用Fiddler进行抓包详解教程。抓取接口以及数据,可以抓真实安卓手机或者模拟器。

    大家都知道抓包的方法很多.我这里给大家介绍介绍一种,利用fiddler进行抓包,当然比如Wireshark也可以抓包,我们这里不做介绍.我这里演示的是fiddler+天天模拟器,当然真实安卓手机也是一 ...

  6. requests利用selenium,代理Ip,云打码,验证码抠图操作 爬取搜狗微信公众号内容

    爬取思路,爬取搜狗微信公众号内容,爬取第一层url时请求太快出现验证码,我这里用的蘑菇云代理,并在程序中我判断什么情况下是否+代理,做到合理运用代理ip.爬取第二层url时验证码出现次数更严重(和第一 ...

  7. iptables - IP包过滤器管理

    总览 iptables -ADC 指定链的规则 [-A 添加 -D 删除 -C 修改] iptables - RI iptables -D chain rule num[option] iptable ...

  8. 无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)

    1.activity的生命周期 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: (1)Activity的完整生命周期 自第一次调用onCrea ...

  9. IP包格式

    网络层提供的服务就是在不同网段之间转发数据包. Ip包结构 1,格式(每行4byte*5) 2,版本 V4 V6 3,首部长度 20(固定)+可变长度 ,区分服务 Win2008开始:gpedit. ...

随机推荐

  1. static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数

    C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域. 从作用域看: 全局变量具有全局作用域.全局变量只需在一个源文件 ...

  2. TestNG教程

    TestNG教程 http://www.yiibai.com/testng/2013/0916311.html TestNG,3种执行方式: 1.ant(build.xml) 2.Eclipse(安装 ...

  3. KVC/KVO简单实例代码

    Person.h #import<Foundation/Foundation.h> @classAccount; @interfacePerson :NSObject{ @private ...

  4. poj 1099

    http://poj.org/problem?id=1099 #include<stdio.h> #include<string.h> #include <iostrea ...

  5. MyEclipse中如何安装插件(以Subclipse为例)[转]

    一.到官方上下载svn1.8.3,下载后的文件名叫site-1.8.3.zip 地址:http://subclipse.tigris.org/servlets/ProjectDocumentList? ...

  6. PDF2

    itex生成PDF文档示例 package dao.other; import java.awt.Color; import java.io.File; import java.io.FileInpu ...

  7. NOSQL 数据库 CodernityDB

    CodernityDB 是一个开源的纯 Python 实现的.无第三方依赖.支持多平台的 NoSQL 数据库. 关键特性: 纯 Python 开发 支持多索引 快速 (每秒将近10万的写入和超过10万 ...

  8. 不插网线,看不到IP的解决办法

    在Windows中,如果不插网线,就看不到IP地址,即使这个块网卡已经绑定了固定IP,原因是操作系统开启了DHCP Media Sense功能,该功能的作用如下: 在一台使用 TCP/IP 的基于 W ...

  9. 浅谈 MVVM 设计模式在 Unity3D 中的设计与实施

    初识 MVVM 谈起 MVVM 设计模式,可能第一映像你会想到 WPF/Sliverlight,他们提供了的数据绑定(Data Binding),命令(Command)等功能,这让 MVVM 模式得到 ...

  10. 用批处理文件进行TCP/IP设置,方便在家与办公IP切换

    在公司用公司分配的固定IP上网,回家后又要将本本设置为家里的固定IP上网,每次都要手动重复一个过程: 打开网络中心,选择本地连接,进入属性然后选择IPV4进行TCP/IP的设置,填入IP,子网掩码DN ...