Linux / Unix Command: packet

PF_PACKET说开去 什么PF_PACKET类型的socket PF_PACKET类型socket应用场合 数据层面:驱动程序怎么把报文送到相应的socket buffer 数据层面:内核驱动可以与用户态零拷贝吗? 1. 什么PF_PACKET类型的socket 创建socket的函数如下: fd = socket(int domain, int type, int prot... 阅读详情
Linux / Unix Command: packet
Command Library

NAME

packet, PF_PACKET - packet interface on device level.

 

SYNOPSIS

#include <sys/socket.h>


#include <features.h>   /* for the glibc version number */


#if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1 


#include <netpacket/packet.h>


#include <net/ethernet.h>       /* the L2 protocols */


#else


#include <asm/types.h>


#include <linux/if_packet.h>


#include <linux/if_ether.h>     /* The L2 protocols */ 


#endif


packet_socket = socket(PF_PACKET, int socket_type, int protocol);
 

DESCRIPTION

Packet sockets are used to receive or send raw packets at the device driver
(OSI Layer 2)level. They allow the user to implement protocol modules in user space on top of the physical layer.

Thesocket_typeis either SOCK_RAW for raw packets including the link level header orSOCK_DGRAMfor cooked packets with the link level header removed. The link levelheader information is available in a common format in asockaddr_ll.protocol is the IEEE 802.3 protocol number in network order. See the<linux/if_ether.h> include file for a list of allowed protocols. When protocol is set tohtons(ETH_P_ALL)then all protocols are received.All incoming packets of that protocol type will be passed to the packetsocket before they are passed to the protocols implemented in the kernel.
 Only processes with effective uid 0 or theCAP_NET_RAWcapability may open packet sockets.

SOCK_RAWpackets are passed to and from the device driver without any changes inthe packet data. When receiving a packet, the address is still parsed andpassed in a standardsockaddr_lladdress structure. When transmitting a packet, the user supplied buffershould contain the physical layer header. That packet is thenqueued unmodified to the network driver of the interface defined by thedestination address. Some device drivers always add other headers.SOCK_RAWis similar to but not compatible with the obsolete SOCK_PACKETof Linux 2.0.

SOCK_DGRAM operates on a slightly higher level. The physical header is removed beforethe packet is passed to the user. Packets sent through aSOCK_DGRAMpacket socket get a suitable physical layer header based on the informationin the sockaddr_ll destination address before they are queued.

By default all packets of the specified protocol typeare passed to a packet socket. To only get packets from a specific interfaceusebind(2)specifying an address in astruct sockaddr_llto bind the packet socket to an interface. Only the sll_protocol and thesll_ifindexaddress fields are used for purposes of binding.

Theconnect(2)operation is not supported on packet sockets.

When theMSG_TRUNCflag is passed torecvmsg(2),recv(2),recvfrom(2)the real length of the packet on the wire is always returned, even when itis longer than the buffer.

 

ADDRESS TYPES

The sockaddr_ll is a device independent physical layer address.


struct sockaddr_ll {
    unsigned short  sll_family;    /* Always AF_PACKET */
    unsigned short  sll_protocol;  /* Physical layer protocol */
    int             sll_ifindex;   /* Interface number */
    unsigned short  sll_hatype;    /* Header type */
    unsigned char   sll_pkttype;   /* Packet type */
    unsigned char   sll_halen;     /* Length of address */ 
    unsigned char   sll_addr[8];   /* Physical layer address */
};

sll_protocol is the standard ethernet protocol type in network order as definedin thelinux/if_ether.hinclude file. It defaults to the socket's protocol.sll_ifindex is the interface index of the interface(seenetdevice(7));0 matches any interface (only legal for binding).sll_hatype is a ARP type as defined in the linux/if_arp.hinclude file.sll_pkttype contains the packet type. Valid types arePACKET_HOSTfor a packet addressed to the local host,PACKET_BROADCASTfor a physical layer broadcast packet,PACKET_MULTICASTfor a packet sent to a physical layer multicast address,PACKET_OTHERHOSTfor a packet to some other host that has been caught by a device driverin promiscuous mode, andPACKET_OUTGOINGfor a packet originated from the local host that is looped back to a packetsocket. These types make only sense for receiving.sll_addrandsll_halencontain the physical layer (e.g. IEEE 802.3) address and its length. The exact interpretation depends on the device.

When you send packets it is enough to specifysll_family,sll_addr,sll_halen,sll_ifindex.The other fields should be 0.sll_hatypeandsll_pkttypeare set on received packets for your information.For bind onlysll_protocolandsll_ifindexare used.

 

SOCKET OPTIONS

Packet sockets can be used to configure physical layer multicasting and promiscuous mode. It works by calling setsockopt(2)on a packet socket for SOL_PACKET and one of the options PACKET_ADD_MEMBERSHIP to add a binding or PACKET_DROP_MEMBERSHIPto drop it.They both expect a packet_mreqstructure as argument:


struct packet_mreq
{
    int             mr_ifindex;    /* interface index */
    unsigned short  mr_type;       /* action */
    unsigned short  mr_alen;       /* address length */
    unsigned char   mr_address[8]; /* physical layer address */ 
};

mr_ifindexcontains the interface index for the interface whose statusshould be changed.Themr_typeparameter specifies which action to perform.PACKET_MR_PROMISCenables receiving all packets on a shared medium - often known as``promiscuous mode'',PACKET_MR_MULTICAST binds the socket to the physical layer multicast group specified inmr_addressandmr_alen,andPACKET_MR_ALLMULTIsets the socket up to receive all multicast packets arriving at the interface.

In addition the traditional ioctls SIOCSIFFLAGS,SIOCADDMULTI, SIOCDELMULTIcan be used for the same purpose.

 

IOCTLS

SIOCGSTAMPcan be used to receive the time stamp of the last received packet. Argumentis a struct timeval.

In addition all standard ioctls defined innetdevice(7)andsocket(7)are valid on packet sockets.

 

ERROR HANDLING

Packet sockets do no error handling other than errors occurred while passingthe packet to the device driver. They don't have the concept of a pendingerror


====

http://linux.about.com/library/cmd/blcmdl7_packet.htm


Linux C/C++进阶实战:从核心原理到AI Infra与音视频项目 C++作为一门系统级编程语言,其核心价值在于对硬件资源的直接控制与极致的运行时性能。其原理建立在RAII资源管理、零开销抽象及对内存模型的精细控制之上,这使得它在需要高性能和低延迟的领域具有不可替代的技术价值。在工程实践中,这些特性被广泛应用于基础设施、高性能计算和实时系统等关键场景。特别是在当前热门的AI基础设施(AI Infra)和音视频处理领域,C++凭借其高效的并行计算能力和对硬件加速器的直接操控,成为构建训练框架、推理引擎、编解码库的核心技术栈。本文将以AI Infra和音视频开发为具体切入点,系 阅读详情

相关推荐

Mac/Win/Linux通用!用Spigot 1.16.5和JuicyRaspberryPie搭建Python可编程MC服务器(含mcpi库Bug修复)

本文详细介绍了如何在Mac、Windows和Linux系统上使用Spigot 1.16.5和JuicyRaspberryPie搭建Python可编程Minecraft服务器,包括mcpi库的Bug修复和跨平台兼容性解决方案。通过逐步指导,帮助开发者快速构建开发环境,实现自动化建筑、游戏逻辑编程等创意应用。

weixin_38168081的博客 362

Linux网络编程- 开启混杂模式(PROMISC)的两种方式

在开发抓包工具或网络监控应用程序时,通常选择哪种方法取决于具体需求。如果只是想要为特定的捕获会话设置混杂模式,而不影响系统上的其他应用程序,使用。如果需要在设备级别更改接口的状态,并希望所有应用程序都能在混杂模式下看到数据包,那么使用。两者都使网络接口能够捕获所有经过的数据包,而不仅仅是发往接口的数据包。以下两种方式都是用于开启混杂模式,但它们的工作方式略有不同。

青衫客36的博客 3284

Linux系统监控本质:从top/netstat/du原始输出到真实瓶颈的翻译逻辑

Linux系统监控不是简单执行命令,而是对内核状态数据的语义翻译。top的%CPU和load average、netstat的TCP状态、du与df的差异,分别对应CPU调度、网络连接生命周期、文件系统引用计数等底层原理。理解这些命令输出背后的内核机制(如WCHAN阻塞点、TIME_WAIT状态机、deleted文件的inode引用),才能将原始指标转化为真实瓶颈判断。其技术价值在于避免误操作(如盲目kill进程)、支撑精准根因分析,并为Prometheus等现代监控体系提供语义基础。典型应用场景包括高负载

weixin_33812433的博客 443

linux 网口 混杂模式,如何在Linux上正确地将网络接口置于混杂模式(How to properly put network interface into promiscuous mode on...

如何在Linux上正确地将网络接口置于混杂模式(How to properly put network interface into promiscuous mode on Linux)那么你如何正确地做到这一点?我知道如何通过创建套接字,然后使用ioctl设置IFF_PROMISC标志(如“ 如何检查C中的网络设备状态? ”和其他地方中所述),但这至少在理论上看起来有缺陷。1)你通过ioctl读...

weixin_29816241的博客 949

FreeBSD入门指南:从Linux切换必知的核心差异与实践

POSIX兼容操作系统是Unix-like系统可移植性的基石,而FreeBSD作为经典BSD系代表,以全栈自研架构、rc服务管理体系、ZFS数据完整性保障和pf声明式防火墙著称。其不依赖systemd、坚持纯POSIX工具链、提供pkg二进制与Ports源码双轨软件生态的设计哲学,使它在稳定性、网络性能与企业级数据安全场景中具备独特技术价值。本文聚焦Linux用户迁移FreeBSD时需重构认知的五大核心模块:初始化系统、服务管理、包管理、文件系统与网络栈,结合真实运维案例解析底层原理与工程落地要点。

weixin_34090562的博客 479

ps、kill、nice:Linux进程管理的三大核心命令深度解析

Linux进程管理是系统运维与开发的基石,其本质围绕进程状态观测、信号通信与资源调度三大维度展开。ps命令通过读取/proc文件系统提供进程快照,揭示R/S/D/Z/T等内核态行为;kill并非简单终止,而是基于POSIX信号协议(如SIGTERM优雅退出、SIGKILL强制回收)实现进程间异步协作;nice则作用于CFS调度器,通过nice值影响static_prio与vruntime,调控CPU时间片分配公平性。三者协同构成‘观测—干预—调优’闭环,广泛应用于服务启停、日志轮转、容器生命周期管理及性能调

weixin_30376083的博客 332

Linux C/C++ 设置混杂模式的三种方法

1、设置网卡混杂模式(全局) system("ifconfig eth0 promisc") // 设置eth0为混杂模式 system("ifconfig eth0 -promisc") // 取消eth0的混杂模式 2、设置网卡混杂模式(全局) inline static bool ethernet_set_promisc(const std::string& device, int promisc) { if (device.empty()) {

liulilittle的博客 2714

Linux Load Average 原理与实战:不是CPU使用率,而是系统资源拥堵指标

Load Average 是 Linux 系统中衡量资源调度压力的核心指标,本质是单位时间内处于可运行(R)或不可中断睡眠(D)状态的进程数的指数移动平均值。它不反映 CPU 占用率,而揭示 I/O 阻塞、锁竞争、磁盘延迟等底层资源瓶颈。其 1/5/15 分钟三值设计兼顾灵敏性与稳定性,广泛应用于容量规划、故障预警和根因分析。结合 /proc/loadavg、ps 状态筛选、iostat 和 D 状态进程追踪,可精准定位高负载真实成因。理解 load 与 CPU 使用率、running 进程数的区别,是运维

weixin_30673611的博客 338

Linux网络编程- struct packet_mreq & setsockopt()

是一个数据结构,用于 Linux 中的原始数据包套接字,当我们想改变套接字的行为以接收特定类型的数据包时,它与函数配合使用。下面是mr_addressmr_type而如果想加入一个特定的多播地址,则设置mr_type为,并提供相应的多播MAC地址。

青衫客36的博客 1155

【16】linux命令/工具,systemd,文件操作,动静态库,信号,socket

apt install python3-pip --fix-missing(断开vpn,cp /etc/apt/sources.list /etc/apt/sources.list.bak,python3 -m pip install --upgrade pip,apt-get update,pip install 包名 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com)设置时间,联网,apt-get install vim。

持续更新ing... 6785

Linux 常用命令

set 指令能设置所使用shell的执行方式 -a  标示已修改的变量,以供输出至环境变量。 -b  使被中止的后台程序立刻回报执行状态。 -C  转向所产生的文件无法覆盖已存在的文件。 -d  Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。 -e  若指令传回值不等于0,则立即退出shell。 -f   取消使用通配符。 -h  自动记录函数的所在位置。 -H ............

zhixingheyi_tian的博客 2301

Linux Command netstat 统计网络数据

netstat介绍 netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。 如果你的计算机有时候接收到的数据报导致出错数据或故障,你不必感到奇怪,TCP/IP可以容许这些类型的错误,并能够自动重发数据报。但如果累计的出错情况数目占到所接收的IP数据报相当大的百分比,或者它的数目正迅速增加,那么你就应该使用netstat查一查为什么会出

爱死亡机器人 1908

生存网络与mlr3proba

通过结合生存网络和mlr3proba,可以使用生存网络模型来预测个体在给定时间点发生事件的概率,并使用mlr3proba提供的工具进行模型的训练、评估和选择最佳模型。iii)基本的机器学习(ML)方法,如重新排序和调整。在本文中,我们将只讨论前五种,因为它们在文献中得到了更好的建立,并且它们具有相同的接口,这简化了调优,我们将在下面看到。我们不会为模型指定自定义架构,而是使用默认架构,如果你熟悉PyTorch,那么你可以选择创建自己的架构,如果你愿意的话,通过将其传递给模型中的custom_net参数。

weixin_46587777的博客 1363

3 种主流 Linux 发行版 MySQL 客户端安装方案对比:APT/YUM/DNF 命令与性能影响

本文详细对比了Ubuntu/Debian、CentOS/RHEL和Fedora三大主流Linux发行版中MySQL客户端的安装方案,包括APT、YUM和DNF命令的使用差异及其对性能的影响。通过实际案例和性能测试数据,帮助DevOps工程师选择最优安装方式,提升数据库操作效率。

weixin_33735077的博客 364

Obsidian免费同步全攻略:手把手教你用OneDrive+Remotely Save插件跨设备同步笔记

本文提供了一份详细的Obsidian免费同步方案指南,核心是利用OneDrive云存储与Remotely Save插件实现跨设备笔记同步。文章手把手教学,涵盖插件安装、OneDrive授权配置、桌面端与移动端的同步设置,并解答了常见问题,帮助用户在不依赖官方付费服务的情况下,构建稳定、自主的免费同步工作流。

bash7scripter的博客 849

Kali实战:构建安卓远程监控工具,实现拍照、定位与信息获取

本文详细介绍了如何使用Kali Linux构建安卓远程监控工具,实现拍照、定位与信息获取功能。通过Metasploit框架生成安卓载荷,部署到目标设备并建立连接,执行远程监控操作如获取位置信息、拍照和读取通讯录。文章还提供了进阶技巧与问题排查方法,强调法律与道德考量。

weixin_28716443的博客 239

unix常用抓包方法

Unix&Linux网络抓包方法 情境 在网络故障诊断过程中,经常需要判断对方发送的网络包是否到达主机,进而了解问题出在网络层面还是主机应用层面。如果能够抓到包,但是应用数据仍然没有,可能应用程序解析出了问题,或者被主机自身防火墙屏蔽;否则可能是网络某处包被丢弃。解决此问题的一个重要手段就是在主机上抓包。 原理 抓包程序为了能...

weixin_30347335的博客 242

Eplan P8自动线号生成全攻略:从电位定义点到连接编号的完整流程

本文详细解析了Eplan P8自动线号生成的全流程,从电位定义点的创建配置到连接编号的标准化管理,帮助电气设计人员提升图纸规范性和工作效率。重点介绍了自动编号方案的定义与调整技巧,以及企业级标准化实施建议,是掌握Eplan P8自动线号功能的实用指南。

weixin_29254029的博客 509

Linux近两年高危漏洞修复过程记录

另外,对于一个大规模的补丁安装,还可以使用脚本的方式,将所有的补丁文件集中到脚本中,这样可以实现大规模的补丁安装。修复措施:目前该漏洞已经修复,https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?下载地址:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/refs/,打补丁fs/overlayfs/copy_up.c。

企业实战系列集 ●●● https://ximenjianxue.blog.youkuaiyun.com 3898

告别手动连接!一键搞定Mumu模拟器与Android Studio的ADB配置

本文详细介绍了如何通过编写自动化脚本,一键完成Mumu模拟器与Android Studio的ADB连接配置。告别繁琐的手动命令输入,该脚本能智能检查环境、判断连接状态并自动处理端口转发,显著提升Android开发者的调试与测试效率。

yog99的博客 495

从宏观到街道:如何利用七普数据为WorldPop人口栅格做“本地化”校准?

本文探讨了如何利用第七次全国人口普查(七普)数据对WorldPop人口栅格进行本地化校准,以提高街道级别的人口分布精度。通过分析数据偏差、选择适当的技术路线和工具(如Arcgis和栅格计算器),文章详细介绍了从宏观到街道的校准实践,帮助规划公共卫生资源和优化城市基础设施。

janckywong963的专栏 511

linux机器 查看端口的占用情况

使用 ss 查看 ss 一般用于转储套接字统计信息。它还可以显示所有类型的套接字统计信息,包括 PACKET、TCP、UDP、DCCP、RAW、Unix 域等。 (docker容器一般能用) 查看 3000端口是否占用 ss -lntpd | grep :3000 tcp LISTEN 0 128 :::3000 :::* ...

swingLau007的博客 686

【嵌入式DIY实例-ESP32篇】-智能花园助手

本文介绍了一个基于ESP32的智能花园监控系统。系统使用ESP-EYE摄像头开发板,集成了土壤湿度传感器、DHT22温湿度传感器和电磁阀等模块,实现植物生长环境监测与自动灌溉功能。硬件部分详细说明了各传感器的接线方式,软件部分展示了如何通过Firebase实现数据存储和远程监控。系统可实时采集土壤湿度、空气温湿度等数据,并通过摄像头监控植物状态,当检测到环境参数异常时,可自动控制水泵进行灌溉,为植物提供最佳生长环境。

视觉与物联智能 263

Linux命令-pipe(管道命令)

pipe(管道)是 Linux Shell 的 核心特性,用于将一个命令的 标准输出 传递给另一个命令的 标准输入。符号为 |(竖线)。

RisunJan的博客 330

Python爬虫实战:基于最新技术栈的晋江文学城小说爬取

本文将详细介绍如何使用Python最新技术栈构建一个高效的晋江文学城小说爬虫。我们将从爬虫基础知识讲起,逐步深入到反爬机制应对、分布式爬虫设计以及数据存储优化等高级话题。文章包含完整的代码实现,使用aiohttp+asyncio实现异步爬取,Playwright处理动态渲染,并结合Redis实现分布式任务队列。本文旨在为读者提供一个全面的现代Python爬虫开发指南。网络爬虫(Web Crawler)是一种自动抓取互联网信息的程序,广泛应用于搜索引擎、数据分析和内容聚合等领域。

2201_76125261的博客 870

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Linux常用操作

文章目录查看系统开机耗时设置开机root用户免密登录允许被使用root身份进行ssh远程登录关闭电源管理系统、设置鼠标不显示查看进程的线程信息修复文件系统全屏截图 查看系统开机耗时 systemd-analyze,例如: root@jaron:/home/jaron# systemd-analyze Startup finished in 3.603s (firmware) + 17.617s (loader) + 5.837s (kernel) + 8.428s (userspace) = 35.487s

hezhanran的博客 2447

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: MAC地址解析-广播地址、组播地址和单播地址的特征
下一篇: Linux编码规范
Alan0521
博客等级 码龄19年 77粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值