linux网络包截获,用C实现截获网络数据包

现在进入第二步,捕获数据包。从第20行开始,我们进入了一个死循环,while(1),在第24行,recvfrom(sock, buffer, sizeof buffer, 0, (struct sockaddr *)&from, &fromlen),这个函数要做的就是接收数据,冰把接收到的数据放入buffer中。就是这么简单,已经完成了我们要捕获数据包的任务。

到了第三步,分析数据包。27行,ip = (struct ip *)buffer,使我们在头文件中的IP结构对应于所接收到的数据,接下来判断在网络层中是否使用的是TCP协议,if(ip-> ip_protocol == 6) ,如果答案是,tcp信息包从整个IP/TCP包 buffer + (4*ip-> ip_length) 地址处开始,所以31行 tcp = (struct tcp *)(buffer + (4*ip-> ip_length)),然后对应结构把你所需要的信息输出。

/*************************headers.h**************************/

/*structure of an ip header*/

struct ip {

unsigned int ip_length:4; /*little-endian*/

unsigned int ip_version:4;

unsigned char ip_tos;

unsigned short ip_total_length;

unsigned short ip_id;

unsigned short ip_flags;

unsigned char ip_ttl;

unsigned char ip_protocol;

unsigned short ip_cksum;

unsigned int ip_source; unsigned int ip_dest;

};

/* Structure of a TCP header */

struct tcp {

unsigned short tcp_source_port;

unsigned short tcp_dest_port;

unsigned int tcp_seqno;

unsigned int tcp_ackno;

unsigned int tcp_res1:4, /*little-endian*/

tcp_hlen:4,

tcp_fin:1,

tcp_syn:1,

tcp_rst:1,

tcp_psh:1,

tcp_ack:1,

tcp_urg:1,

tcp_res2:2;

unsigned short tcp_winsize;

unsigned short tcp_cksum;

unsigned short tcp_urgent;

};

/*********************EOF***********************************/

另外一个例子:

#include

#include

#include

#include

#include

#include

#include

int main(int argc, char **argv)

{

int sock, n;

char buffer[2048];

unsigned char *iphead, *ethhead;

if ( (sock=socket(PF_PACKET, SOCK_RAW,htons(ETH_P_IP))) <0)

{

perror( "socket ");

exit(1);

}

while (1) {

printf( "----------\n ");

n = recvfrom(sock,buffer,2048,0,NULL,NULL);

printf( "%d bytes read\n ",n);

/* Check to see if the packet contains at least

* complete Ethernet (14), IP (20) and TCP/UDP

* (8) headers.

*/

if (n <42) {

perror( "recvfrom(): ");

printf( "Incomplete packet (errno is %d)\n ",

errno);

close(sock);

exit(0);

}

ethhead = buffer;

printf( "Source MAC address: "

"%02x:%02x:%02x:%02x:%02x:%02x\n ",

ethhead[0],ethhead[1],ethhead[2],

ethhead[3],ethhead[4],ethhead[5]);

printf( "Destination MAC address: "

"%02x:%02x:%02x:%02x:%02x:%02x\n ",

ethhead[6],ethhead[7],ethhead[8],

ethhead[9],ethhead[10],ethhead[11]);

iphead = buffer+14; /* Skip Ethernet header */

if (*iphead==0x45) { /* Double check for IPv4

* and no options present */

printf( "Source host %d.%d.%d.%d\n ",

iphead[12],iphead[13],

iphead[14],iphead[15]);

printf( "Dest host %d.%d.%d.%d\n ",

iphead[16],iphead[17],

iphead[18],iphead[19]);

printf( "Source,Dest ports %d,%d\n ",

(iphead[20] < <8)+iphead[21],

(iphead[22] < <8)+iphead[23]);

printf( "Layer-4 protocol %d\n ",iphead[9]);

}

}0b1331709591d260c1c78e86d0c51c18.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487769.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue框架的知识

基础&#xff1a;实例----组件----指令----选项-----计算属性----事件绑定----模板渲染-----内置动画 ---组件交互----路由。 vuejs干了什么事情&#xff1a;数据渲染/数据同步 组件化/模块化开发 其他&#xff1a;路由&#xff0c;ajax&#xff0c;数据流。 Vue实例对象&#…

自动驾驶的实现之路——几大关键传感器应用解析

来源&#xff1a;MEMS随着近两年来智慧汽车、车联网等等概念的兴起&#xff0c;汽车自动驾驶的各种科技进展不断占据媒体版面&#xff0c;引起了全球的关注和各国政府的支持。对于大部分人来说&#xff0c; “吃着火锅唱着歌”轻轻松松地直达目的地绝对是美好的愿望&#xff0c…

linux 退后根目录,linux下半部与退后执行的工作

表。当一个工作者线程被唤醒时&#xff0c;它会执行它的链表上的所有工作。当工作完毕时&#xff0c;他会将相应的work_struct对象从链表中移去。7.4.2 使用工作队列(1)创建推后的工作首先要做的是实际创建一些需要推后执行的工作。可以通过DECLARE_WORK在编译时静态的创建该结…

探索“植物人”语言能力和意识水平

来源&#xff1a;脑科学与智能技术卓越创新中心2020年5月25日&#xff0c;中国科学院脑科学与智能技术卓越创新中心&#xff08;神经科学研究所&#xff09;、中国科学院灵长类神经生物学重点实验室王立平研究组与复旦大学附属华山医院神经外科毛颖/吴雪海团队在《自然-神经科学…

linux多线程时序问题,Linux时序竞态问题(sleep函数的实现)

时序竞态是指同样的程序&#xff0c;多次调用运行的结果不同&#xff0c;这是由于争夺系统资源所造成的。比如说我们要使用alarm和pause函数来实现一个sleep的功能&#xff0c;那么由于alarm函数的实现过程并不是一个原子操作&#xff0c;那么随时可能被中断。比如说alarm了1秒…

QQList列表功能实现

1.模型 class FriendsModel; interface GroupModel : NSObject property (nonatomic, copy) NSString *name; property (nonatomic, copy) NSString *online; property (nonatomic, strong) NSArray *friends; property (nonatomic, strong) FriendsModel *friendModel; proper…

探臻实录 | 戴琼海:搭建脑科学与人工智能的桥梁

来源&#xff1a;探臻科技评论人工智能作为21世纪最具有影响力的技术&#xff0c;正在包括诸如机器人、语言识别、图像识别、自然语言处理等诸多领域发挥着重要作用。脑科学被誉为“人类科学最后的前沿”&#xff0c;认识脑的奥秘是对人类的终极挑战。而更重要的是&#xff0c;…

linux下的单机工具,Linux下单机模式的Hadoop部署

需要软件&#xff1a;ssh&#xff1a;fedore 9 自带。jdk&#xff1a;http://java.sun.com/javase/downloads/index.jsp&#xff0c;下最近版本jdk-6u18-linux-i586Hadoop&#xff1a;http://apache.etoak.com/hadoop/core/hadoop-0.20.1/&#xff0c;最新版本0.20.1&#xff0…

全球顶尖计算机科学家排名,中科大上榜人数全国第一

来源&#xff1a;今日头条一年一度的全球顶尖计算机科学家TOP1000榜单出炉&#xff0c;这份由Guide2Research发布的计算机科学家排名中&#xff0c;中国科学技术大学以16人入选力压清华、北大、浙大等计算机科学强校&#xff0c;高居全国第一&#xff01;中科大张亚勤等13位本科…

Linux可以对目录进行硬链接,Linux硬链接与软链接原理及用法解析

在linux系统中有种文件是链接文件&#xff0c;可以为解决文件的共享使用。链接的方式可以分为两种&#xff0c;一种是硬链接(hard link)&#xff0c;另一种是软链接或者也称为符号链接(symbolic link)。硬链接概念硬链接(hard link, 也称链接)就是一个文件的一个或多个文件名硬…

CentOS6实现路由器功能

网络之间的通信主要是依靠路由器&#xff0c;当然生成环境中是拥有路由器的&#xff0c;但是系统中的路由配置也是需要了解一下地&#xff0c;今天讲解一下在CentOS6环境下搭建路由器&#xff0c;此乃入门级的简单实验。拓扑如上图已经规划好&#xff0c;暂且使用静态路由演示。…

在近期,美众议院为何密集提出了15项新兴技术法案?

来源&#xff1a;资本实验室近期&#xff0c;美国众议院能源和商业委员会及消费者保护与商业小组委员会密集提出了15项与新兴技术相关的法案议程。这些法案开宗明义&#xff0c;建立了明确的目标&#xff1a;确保美国在新兴技术领域的领导地位&#xff0c;以在全球竞争力方面战…

javascript测试框架mocha

node测试框架mocha 简单、灵活、有趣&#xff0c;mocha是一个功能丰富的javascript测试框架&#xff0c;运行在node和浏览器中&#xff0c;使异步测试变得更加简单有趣。http://mochajs.org/ 安装 $ npm install --global mocha//全局安装$ npm install --save-dev mocha//项…

复杂指令集linux,精简指令集和复杂指令集区别

精简指令集概述精简指令集计算机(RISC:Reduced Instruction Set Computing RISC)是一种执行较少类型计算机指令的微处理器&#xff0c;起源于80年代的MIPS主机(即RISC机)&#xff0c;RISC机中采用的微处理器统称RISC处理器。这样一来&#xff0c;它能够以更快的速度执行操作(每…

求助马斯克实现载人飞行,NASA省了近300亿美元

出品 | 网易科技《知否》栏目组当美国宇航局&#xff08;NASA&#xff09;的宇航员于当地时间5月27日搭乘SpaceX的载人龙飞船升空时&#xff0c;他们将不仅仅是进入太空&#xff0c;还将开启一个可能具有变革意义的新时代&#xff0c;因为此前没有任何私人公司将人类送入轨道。…

Codeforces 138C(区间更新+离散化)

题意&#xff1a;有n棵树在水平线上&#xff0c;给出每棵树的坐标和高度&#xff0c;然后向左倒的概率和向右倒的概率&#xff0c;和为1&#xff0c;然后给出了m个蘑菇的位置&#xff0c;每一个蘑菇都有一个魔法值&#xff0c;假设蘑菇被压死了&#xff0c;也就是在某棵树[a[i]…

linux基础操作与实践,Linux操作系统基础与实践

《21世纪高等院校计算机网络工程专业规划教材:Linux操作系统基础与实践》由清华大学出版社出版。19.18定价&#xff1a;29.50(6.51折)/2014-06-01《Linux劋作系统基础与实践/21世纪高等院校计算机网络工程专业规划教材》内容共分10章&#xff0c;第1章主要讲解劋作系统概述、劋…

MIT机器学习种菜项目永久关停

来源&#xff1a;IEEE电气电子工程师Photo: Harry Goldstein麻省理工学院媒体实验室的开放农业计划&#xff08;Open Agriculture Initiative&#xff09;&#xff0c;由首席科学家Caleb Harper领导&#xff0c;于2020年4月30日被该大学永久关闭。媒体关系总监Kimberly Allen在…

FastLeaderElection

FastLeaderElection是zookeeper默认的选举算法,当peer处于ServerState.Looking状态时会执行FastLeaderElection.lookForLeader进行选主. 重要数据结构: 1.HashMap<Long, Vote> recvset: 本轮选举中来自 ServerState处于 Looking的 Peer的选票信息. 用于判断是否选举结束…

linux安装-bin.rpm,Linux离线安装jdk,bin、rpm和tar.gz三种方式及配置jdk环境变量

本文主要是为了记录安装过程&#xff0c;方便后续用到时可及时翻阅&#xff0c;如有不对之处&#xff0c;请各位不吝赐教。因离线安装方法较为常用&#xff0c;故本文主要说明使用离线方式安装jdk的方法&#xff0c;在线安装方法后续补充。第一步&#xff1a;下载jdk官网下载地…