Linux原始套接字抓取底层报文

Linux原始套接字实现分析 图中TCP、UDP和ICMP协议的接收处理函数分别为tcp_v4_rcv()、udp_rcv()和icmp_rcv()。对于IP报文,在协议栈的ip_local_deliver_finish()函数中会匹配是否有注册的网络层原始套接字,若匹配上就通过skb_clone()克隆报文并交给相应的原始套接字来处理。对于IP报文,在协议栈的ip_local_deliver_finish()函数中会匹配是否有注册的网络层原始套接字,若匹配上就通过skb_clone()克隆报文并交给相应的原始套接字来处理。 阅读详情

1.原始套接字使用场景

        我们平常所用到的网络编程都是在应用层收发数据,每个程序只能收到发给自己的数据,即每个程序只能收到来自该程序绑定的端口的数据。收到的数据往往只包括应用层数据,原有的头部信息在传递过程中被隐藏了。某些情况下我们需要执行更底层的操作,比如监听所有本机收发的数据、修改报头等,而像SOCK_STREAM、SOCK_DGRAMZ则通常用于应用层,并不能满足该需求。

         通过原始套接字,我们可以抓取所有发送到本机的IP包(包括IP头和TCP/UDP/ICMP包头),也可以抓取所有本机收到的帧(包括数据链路层协议头)。普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以。利用原始套接字,我们可以自己构造IP头。

2.原始套接字分类及套接字函数简介

         有两种原始套接字:
                  一种是处理IP层及其上的数据,通过指定socket第一个参数为AF_INET来创建这种套接字。
                  另一种是处理数据链路层及其上的数据,通过指定socket第一个参数为PF_PACKET来创建这种套接字。

        socket函数简介:

    int socket(int domain, int type, int proto)

#include <sys/types.h>

#include <sys/socket.h>

参数 选项 作用
domain AF_INET 获取用网络层开始的数据(完整的IP数据包)  
PF_PACKET 获取数据链路层开始的数据(链路层头+IP 数据包)  
... ... 其他domain选项暂未使用,不予说明  
type SOCK_STREAM 面向连
linux原始套接字抓取网络数据 基于linux 一、获取数据     当我们在做网络安全或者数据探测等工作经常会用到、熟悉的工具有tcpdump、wireshark等,这里我们介绍如何使用C程序原始套接字linux系统上抓取IP链路层数据。     首先我们先熟悉一个非常重要的函数socket,我们可以通过linux的man手册找到socket函数描述 #include <sys/socket.h> int socket(int domain, int type, int protocol) 阅读详情

相关推荐

Linux系统抓取数据

这篇文章介绍了Linux下如何实现定制化的类wireshark程序的一些要点(不需要装pcap,利用Linux 的 socket 自带的一些功能)。 Ethernet frame 参考资料:   https://en.wikipedia.org/wiki/Ethernet_frame   http://www.cnblogs.com/uvsjoh/archive/2012/12/31/28

旧城落叶的小笔记 9585

linux/unix工具tcpdump

linux/unix工具tcpdump

使用Linux 原始套接字抓取数据链路层上IEC61850-9-2(LE) SV数据并显示的参考程序

目标:在linux下使用C语言的原始套接字来接收以太网数据链路层上的数据,并

zgrjkflmkyc的专栏 4788

原始套接字报文格式

一、原始套接字概述 原始套接字(SOCK_RAW) 概述: 1、一种不同于SOCK_STREAM、SOCK_DGRAM的套接字,它实现于系统核心。 2、可以接收本机网卡上的所以数据帧(数据),对于监听网络流量和分析网络数据很有作用。 3、开发人员可发送自己组装的数据到网络上。 4、广泛应用与高级网络编程。 5、网络专家、黑客通常用此来编写奇特的网络程序。 三种套接字对比: ①流式套接字只能收发TCP协议的数据。 ②数据套接字只能收发UDP协议的数据。 ③原始套接字可以收发 内核没有处理的数据,因此要

PPPPPPPKD的博客 2434

网络编程基础 --> 网络通信机理、报文与协议、套接字通信预备

本文介绍了网络通信的机理,计算机网络的模型、各层的协议及主要作用、网络通信是如果找到目标机、TCP协议、DNS等

steaksunflower的博客 846

Linux 网络编程——原始套接字实例:发送 UDP 数据

以太网报文格式:详细的说明,请看《MAC 头部报文分析》。IP 报文格式:详细的说明,请看《IP 数据报格式详解》。UDP 报文格式:详细的说明,请看《UDP 数据报格式详解》。校验和函数:/******************************************************* 功能: 校验和函数 参数: buf: 需要校验数据的首地址 nword: 需要校验数据长度...

秋叶原 && Mike || 麦克 7万+

Linux之网络学习第二部分:网络套接字编程之UDP协议

所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口。 总结:套接字相当于我们之间通信的桥梁,我们接收与发送的所有信息都要通过套接字。.........

jiaao666的博客 823

原始套接字抓取所有以太网数据与分析

If you have any idea, just send comments to me.1.原始套接字介绍关于socket使用客户机/服务器模型的 SOCK_STREAM 或者 SOCK_DGRAM 用于 TCP 和 UDP 连接的应用更为普遍一些,而如果考虑到从网卡中直接捕获原始报文数据就需要用到原始套接字 SOCK_RAW 类型了。其中原始套接字根据 socket 选项可以工作在网络不同层

SoldierJazz的专栏 5089

深入解析MMAP模式下的原始套接字

深入解析MMAP模式下的原始套接字 一、前言 对于原始套接字大家都不陌生,即PF_PACKET类型的套接字,我们平时使用的程序就是基于这种套接字实现的。下图中就是我们平时使用到的套接字的分类,可以看到原始套接字是一种底层链路层的套接字,它直接接收网卡驱动收上来的。这里要做一下概念上的区分,PF_INET中的SOCK_RAW一般情况下也被称为原始套接字,只不过这种套接字是工作在IP层的,即网络模型中的三层,并非我们今天关注的对象。 原始套接字可能会接收到或者发送出去大量的报文,因此效率对其是非常重要

qq_17045267的博客 2771

Linux C raw_socket (原始套接字

我们平常所用到的网络编程都是在应用层收发数据,每个程序只能收到发给自己的数据,即每个程序只能收到来自该程序绑定的端口的数据。收到的数据往往只括应用层数据。某些情况下我们需要执行更底层的操作,比如监听所有本机收发的数据、修改报头等。 通过原始套接字,我们可以抓取所有发送到本机的IPIP头和TCP/UDP/ICMP头),也可以抓取所有本机收到的帧(括数据链路层协议头)。普通的套接字无法

zgrjkflmkyc的专栏 1万+

网络通信之原始套接字

fanxiushu 2017-04-11 我们在做网络编程时候,大都使用的是TCP或者UDP协议的套接字,下边这样的代码就创建了一个TCP或UDP的套接字 int fd = socket(AF_INET, SOCK_STREAM,0);  /// TCP int fd = socket(AF_NET, SOCK_DGRAM, 0 );  ///  UDP 使用recv或recvfrom接收

fanxiushu的专栏 7386

Linux原始套接字实现UDP客户端

通过C代码结合Linux下的socket编程,采用原始套接字技术实现UDP客户端

nothing 609

Linux raw socket

我们平常所用到的网络编程都是在应用层收发数据,每个程序只能收到发给自己的数据,即每个程序只能收到来自该程序绑定的端口的数据。收到的数据往往只括应用层数据。某些情况下我们需要执行更底层的操作,比如监听所有本机收发的数据、修改报头等。 通过原始套接字,我们可以抓取所有发送到本机的IPIP头和TCP/UDP/ICMP头),也可以抓取所有本机收到的帧(括数据链路层协议头)。普通的套接字无法...

Zehpyr的博客 2558

Linux C++网络嗅探器实战:从原始套接字到协议解析

网络数据捕获是网络编程、安全分析和性能调优的基石。其核心原理在于绕过操作系统协议栈,直接从网卡获取原始数据帧。这项技术为深度网络监控、入侵检测和协议分析提供了底层支持,广泛应用于网络安全、运维和开发调试场景。通过原始套接字(Raw Socket)实现数据捕获,能让开发者透彻理解以太网帧、IP报文及TCP/UDP协议头的结构与解析过程。本文以C++实战为例,详细阐述了在Linux环境下构建轻量级网络嗅探器的完整流程,涵盖从创建AF_PACKET套接字、设置混杂模式,到逐层解析数据并处理网络字节序等关键技

weixin_42531494的博客 320

linux 原始套接字解析

我们平常所用到的网络编程都是在应用层收发数据,每个程序只能收到发给自己的数据,即每个程序只能收到来自该程序绑定的端口的数据。收到的数据往往只括应用层数据。某些情况下我们需要执行更底层的操作,比如监听所有本机收发的数据、修改报头等。 通过原始套接字,我们可以抓取所有发送到本机的IPIP头和TCP/UDP/ICMP头),也可以抓取所有本机收到的帧(括数据链路层协议头)。普通的套接字

xiongwenwu的专栏 568

linux网络协议栈(四)链路层 (4)原始套接字

7.5、原始套接字: 这里的原始套接字是指链路层原始套接字,即socket类型为AF_PACKET的套接字,它将为应用程序获取它所需以太网类型的以太网报文,应用程序通过如下系统调用在内核中创建相应的socket文件并注册相应以太网类型(下面的protocol参数)的处理需求: int fd = socket(AF_PACKET,  SOCK_RAW,  protocol); 这样内核中就注

u010246947的专栏 2158

【原创】网络报文抓取研究

1 引言 网络报文抓取是指通过对主机网络设备的探测,实现获取该网络当前传输的所有信息,并根据信息的源主机、目标主机、服务协议和端口等信息简单过滤掉不关心数据,然后提交给上层应用程序进行进一步处理。 2 网络数据捕获原理 一个捕获机制含三个主要部分 1) 捕获机制 不同的操作系统实现的底层捕获机制可能是不一样的,但从形式上看大同小异。数据常规的传输路径依次为网卡...

weixin_33889665的博客 441

Linux原始网络编程,Linux操作系统网络编程 原始套接字 (1)

Linux操作系统网络编程--原始套接字 (1)http://soft.zdnet.com.cn/software_zone/2007/1020/568223.shtml我们在前面已经学习过了网络程序的两种套接字(SOCK_STREAM,SOCK_DRAGM).在这一章 里面我们一起来学习另外一种套接字--原始套接字(SOCK_RAW)。应用原始套接字,我们可以编写出由TCP和UDP套接字不能够实...

weixin_32868705的博客 109
上一篇: Linux网络编程:原始套接字简介
下一篇: Windos下通过Wpcap抓包实现两个网卡桥接
叨陪鲤
叨陪鲤 新星创作者: 信息安全技术领域 新星创作者: 信息安全技术领域
博客等级 码龄9年 2万+粉丝 273原创
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叨陪鲤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值