linux下c语言抓包,C语言实现抓包工具
本文使用libpcap库在linux下面开发自定义抓包工具,同学们也可以在win下编写同样的代码。
抓包的目的:
1、分析协议
2、伪造数据包
3、获取重要信息,例如用户名和密码
4、做某些攻击使用
抓包的工具
(1)Wireshark 可视化的工具
(2)Tcpdump
是命令行的工具。
(3)自定义抓包工具
原因1: 只抓取感兴趣的部分,去掉无关紧要的东西,为其他目的服务。
原因2:如果有别的目的,例如偷偷安装在别的机器上,有必要保持隐身,保持短小。
抓包工具的构造原理
(1)用原始套接字抓取所有的数据包,然后解析。
(2)使用现成的库来抓包。
Libpcap库,是在linux下面的一个库。如果是windows开发的话,可以使用wincap这个库。两个的函数等都是一样。
欢迎加入学习群【892643663】,获取全套免费C/C++企业实战级课程资源(素材+源码+视频)和编译大礼包
自定义抓包工具的编程过程
(1)想要抓到链路层的包,要打开网卡设备。(在linux下面会把所有的设备当成文件,linux的哲学之一)相当于从这个网卡文件里抓取文件内容。
(2)设置好过滤规则,只保留特定的包
(3)开始抓包,然后输出感兴趣的部分
代码#include
#include //libpcap库的头文件
#include
#include //ip协议定义
#include //tcp协议定义
#include
#include
//用C语言手工写一个抓包工具
int main(void)
{
//1-1 找出可用的网卡
pcap_if_t *pcap_if;
char ErrorBuf[PCAP_ERRBUF_SIZE]={0};
int r=pcap_findalldevs(&pcap_if,ErrorBuf);//寻找所有网卡设备
if(r==-1) //异常
{
printf("finddev error\n");
return -1;//直接返回,不要再往下走
}
printf("第一个网卡的名字是%s\n",pcap_if[0].name);
printf("第二个网卡的名字是%s\n",pcap_if[1].name);
//1-2 打开那个网卡设备
pcap_t *handler; //用来描述一个打开的网卡设备对象
handler=pcap_open_live(pcap_if[0].name,PCAP_BUF_SIZE,1,100,ErrorBuf);
if(handler==NULL)
{
printf("打开失败\n");
return -1;
}
//2 设置好过滤规则,只抓取tcp的包
unsigned int ip,mask;
r=pcap_lookupnet(pcap_if[0].name,&ip,&mask,ErrorBuf);
if(r==-1)
{
printf("ip获取失败");
return -1;
}
struct bpf_program prog;
r=pcap_compile(handler,&prog,"tcp",0,mask);//规则有n种写法,例如port 80表示抓取80端口的包
if(r==-1)
{
printf("编译失败\n");
return -1;
}
pcap_setfilter(handler,&prog);
//3 抓包
struct pcap_pkthdr pkhdr;//包的信息
while(1)
{
const unsigned char *packet=pcap_next(handler,&pkhdr);//一行就可以拿到一个包
if(packet==NULL)
{
pcap_close(handler);
break;
}
//将包的信息打出来
printf("包的长度是%d\n",pkhdr.len);
// int i;
// for(i=0;i
// {
// printf("%02x ",packet[i]);
// }
// printf("\n");
//4 输出感兴趣的部分
//例如,只输出包的源头,目标的ip和端口
//包由链路层14个字节+ip层20字节+后面的tcp数据组成
struct ip *ip=(struct ip *)(packet+14);
struct tcphdr *tcp=(struct tcp *)(packet+14+20);
char ipsrc[30],ipdst[30];
//strcpy(ipsrc,inet_ntoa(ip->ip_src));
inet_ntop(AF_INET,&ip->ip_dst,ipsrc,30);
strcpy(ipdst,inet_ntoa(ip->ip_dst));
printf("%s(%d)=====>%s(%d)\n",ipsrc,ntohs(tcp->th_sport),ipdst,ntohs(tcp->th_dport));
}
}
欢迎加入学习群【892643663】,获取全套免费C/C++企业实战级课程资源(素材+源码+视频)和编译大礼包
linux下c语言抓包,C语言实现抓包工具相关推荐
- linux 监控微信通知,一个 Linux 下基于 Bash 的文件和数据库监控及备份工具,可发送微信报警通知...
shellMonitor 一个 Linux 下基于 bash 的文件和数据库监控及备份工具. 写这个工具的原因,在于一个朋友的一个小电商网站,因为未明原因被黑了,总是会被增加超级管理员,并将收款账号改 ...
- linux mcrypt扩展,Linux下php安装mcrypt扩展-Go语言中文社区
说明: 操作系统:CentOS 5.x 64位 已安装php版本:php-5.4.4 已安装php路径:/usr/local/php 实现目的: 在不影响网站访问的情况下,重新编译php,增加对mcr ...
- linux获取网卡协议地址,读取linux下的网络设备的mac地址与发送原始数据包 (2011-11-23 20:11)...
一:linux下的网络设备 linux的网络设备信息都在/proc/net/dev,从这里我们可以得到所有网卡的名字,如eth0, eth1等等 root@dlrc-desktop:/home/dlr ...
- Linux下Netfilter创建自己的Hook,让数据包可以发送到用户层,然后统计节点负载信息
Linux下Netfilter创建自己的Hook函数,让数据包可以发送到用户层,然后统计节点的负载信息 写在最前面,我的linux内核版本是4.4.0-31-generic,版本是Ubuntu 16. ...
- linux默认编译多核,[转载]【原创】Linux下安装单机多核并行lammps(附meam包)
总结:Linux下安装单机并行lammps ○.机器配置: 1.处理器:Intel XEON × 2 2.主板:Intel S5500BC 3.内存:金士顿4G × 6 4.操作系统:Redhat E ...
- linux如何解压deb文件,Linux下常用文件解压(包括rpm、deb包的解压方法!)
Linux下常用文件解压 inux下怎么解后缀名是gzip的文件? 1.以.a为扩展名的文件: #tar xv file.a 2.以.z为扩展名的文件: #uncompress file.Z 3.以. ...
- Linux下几款C++程序中的内存泄露检查工具
Linux下编写C或者C++程序,有很多工具,但是主要编译器仍然是gcc和g++.最近用到STL中的List编程,为了检测写的代码是否会发现内存泄露,了解了一下相关的知识. 所有使用动态内存分配(dy ...
- noi linux下如何安装视频播放器 和 播放swf文件的工具
因为考试需要,孩子们必须要在赛前掌握使用noilinux了,可是使用起来诸多不方便,这不,在linux里用什么看视频和swf教程呢. 下面提供我搜集到的方法: 1.用noilinux自带的smplay ...
- Linux下生产者消费者问题的C语言实现
注:查看全文请关注作者,或点击前往:生产者-消费者问题的C语言实现 实验六 生产者-消费者问题实现 实验题目 要求 在Linux操作系统下用C实现经典同步问题:生产者-消费者,具体要求如下: (1) ...
- linux进程退出没有log,Linux下应用进程消失原因分析-Go语言中文社区
应用部署在Linux环境下,如果出现未知原因导致应用进程被杀(应用日志中没有任何异常现象,日志出现中断现象),如果对于进程消失原因没有特别明确的方向,可以考虑从系统日志(/var/log/messag ...
最新文章
- 管理本地多个SSH Key
- IOS设备唯一标示符的方案比较
- java 按钮设置图片_Java中如何设置带图片按钮的大小
- 【无标题】VUE 强行加载demo元素
- 使用Android自带DownloadManager下载文件
- Flex3与BlazeDS HelloWorld 详解
- rrpp协议如何修改_RRPP协议做为高级网络工程师不能不懂的技术带你快速学习
- POJ 2635 The Embarrassed Cryptographer(JAVA)
- ppocr 源码阅读:ppocr.modeling.architecures 之build_model模块
- 【NLP】揭秘马尔可夫模型神秘面纱系列文章(四)
- java自学能学会吗_Java自学能学会吗?Java新手学习路线
- android之LitePal 3.0 的基本使用
- 多多客API SDK【拼多多开放平台】
- Android读出Excel报表数据然后导出写入到SQLite数据库
- GDOC CEO Musk Shing出席“链接未来”区块链全球人才交流会
- Business English-Unit 4 Memos -B
- 《计算机视觉工程师养成计划 》·数字图像处理·数字图像特征·链码
- 笔记本电脑维修90个精选实例
- 【Python学习笔记】36:抓取去哪儿网的旅游产品数据
- Ubutun20.0.4搭建Opengrok1.3.16查看Android源码