linux sockaddr结构体,网络编程之sockaddr_ll结构体 | 人人学技术
sockaddr_ll, 源文件为,结构如下:
struct sockaddr_ll
{
unsigned short int sll_family; /* 一般为AF_PACKET */
unsigned short int sll_protocol; /* 上层协议 */
int sll_ifindex; /* 接口类型 */
unsigned short int sll_hatype; /* 报头类型 */
unsigned char sll_pkttype; /* 包类型 */
unsigned char sll_halen; /* 地址长度 */
unsigned char sll_addr[8]; /* MAC地址 */
};
sll_family 和sockaddr_in中的sa_family一样,但选项要设置为AF_PACKET。
设置成这个选项后,从网卡接收的数据包可以直接传送到应用程序而不经过内核处理。
sll_protocol 表示上层的协议类型:
源文件为
/*
* These are the defined Ethernet Protocol ID's.
*/
#define ETH_P_LOOP 0x0060 /* Ethernet Loopback packet */
#define ETH_P_PUP 0x0200 /* Xerox PUP packet */
#define ETH_P_PUPAT 0x0201 /* Xerox PUP Addr Trans packet */
#define ETH_P_IP 0x0800 /* Internet Protocol packet */
#define ETH_P_X25 0x0805 /* CCITT X.25 */
#define ETH_P_ARP 0x0806 /* Address Resolution packet */
#define ETH_P_BPQ 0x08FF /* G8BPQ AX.25 Ethernet Packet*/
#define ETH_P_IEEEPUP 0x0a00 /* Xerox IEEE802.3 PUP packet */
#define ETH_P_IEEEPUPAT 0x0a01 /* Xerox IEEE802.3 PUP Addr Trans packet */
#define ETH_P_DEC 0x6000 /* DEC Assigned proto */
#define ETH_P_DNA_DL 0x6001 /* DEC DNA Dump/Load */
#define ETH_P_DNA_RC 0x6002 /* DEC DNA Remote Console */
#define ETH_P_DNA_RT 0x6003 /* DEC DNA Routing */
#define ETH_P_LAT 0x6004 /* DEC LAT */
#define ETH_P_DIAG 0x6005 /* DEC Diagnostics */
#define ETH_P_CUST 0x6006 /* DEC Customer use */
#define ETH_P_SCA 0x6007 /* DEC Systems Comms Arch */
#define ETH_P_RARP 0x8035 /* Reverse Addr Res packet */
#define ETH_P_ATALK 0x809B /* Appletalk DDP */
#define ETH_P_AARP 0x80F3 /* Appletalk AARP */
#define ETH_P_IPX 0x8137 /* IPX over DIX */
#define ETH_P_IPV6 0x86DD /* IPv6 over bluebook */
#define ETH_P_PPP_DISC 0x8863 /* PPPoE discovery messages */
#define ETH_P_PPP_SES 0x8864 /* PPPoE session messages */
#define ETH_P_ATMMPOA 0x884c /* MultiProtocol Over ATM */
#define ETH_P_ATMFATE 0x8884 /* Frame-based ATM Transport
* over Ethernet
*/
一般是IP的话选ETH_P_IP。或者小心的选择ETH_P_ALL
sll_ifindex 表示接口类型,也可以选择:
源文件
/* Media selection options. */
enum {
IF_PORT_UNKNOWN = 0,
IF_PORT_10BASE2,
IF_PORT_10BASET,
IF_PORT_AUI,
IF_PORT_100BASET,
IF_PORT_100BASETX,
IF_PORT_100BASEFX
};
但不知道真的起作用吗,我选的10BASET——基于双绞线的10M以太网。
AF_INET 在里定义为2,表示IP protocol family.
AF_IENT和IF_PORT_10BASET的大小一样。
sll_hatype ARP 硬件地址类型
可以选择,源文件为
/* ARP protocol HARDWARE identifiers. */
#define ARPHRD_NETROM 0 /* From KA9Q: NET/ROM pseudo. */
#define ARPHRD_ETHER 1 /* Ethernet 10/100Mbps. */
#define ARPHRD_EETHER 2 /* Experimental Ethernet. */
#define ARPHRD_AX25 3 /* AX.25 Level 2. */
#define ARPHRD_PRONET 4 /* PROnet token ring. */
#define ARPHRD_CHAOS 5 /* Chaosnet. */
#define ARPHRD_IEEE802 6 /* IEEE 802.2 Ethernet/TR/TB. */
#define ARPHRD_ARCNET 7 /* ARCnet. */
#define ARPHRD_APPLETLK 8 /* APPLEtalk. */
#define ARPHRD_DLCI 15 /* Frame Relay DLCI. */
#define ARPHRD_ATM 19 /* ATM. */
#define ARPHRD_METRICOM 23 /* Metricom STRIP (new IANA id). */
sll_pkttype 包含分组类型
有效的分组类型:
目标地址是本地主机的分组用的 PACKET_HOST,
物理层广播分组用的 PACKET_BROADCAST ,
发送到一个物理层多路广播地址的分组用的 PACKET_MULTICAST,
在混杂(promiscuous)模式下的设备驱动器发向其他主机的分组用的PACKET_OTHERHOST,
本源于本地主机的分组被环回到分组套接口用的 PACKET_OUTGOING。
这些类型只对接收到的分组有意义。sll_addr 和 sll_halen 包括物理层(例如 IEEE 802.3)地址和地址长度。精确的解释依赖于设备。
sll_halen 为MAC地址长度(6 bytes)
源文件
#define ETH_ALEN 6 /* Octets in one ethernet addr */
#define ETH_HLEN 14 /* Total octets in header. */
#define ETH_ZLEN 60 /* Min. octets in frame sans FCS */
#define ETH_DATA_LEN 1500 /* Max. octets in payload */
#define ETH_FRAME_LEN 1514 /* Max. octets in frame sans FCS */
sll_addr[8] 为目的MAC地址(按sockaddr_in.sin_addr为目的IP地址推测)
linux sockaddr结构体,网络编程之sockaddr_ll结构体 | 人人学技术相关推荐
- (47)LINUX应用编程和网络编程之二Linux文件属性
Linux下的文件系统为树形结构,入口为/ 树形结构下的文件目录: 无论哪个版本的Linux系统,都有这些目录,这些目录应该是标准的.各个Linux发行版本会存在一些小小的差异,但总体来说,还是大体差 ...
- Linux C高级编程——网络编程之TCP(3)
Linux网络编程(三)--TCP 宗旨:技术的学习是有限的,分享的精神是无限的. 1.TCP段格式 和UDP协议一样也有源端口号和目的端口号,通讯的双方由IP地址和端口号标识.32位序号.32位确认 ...
- Linux C高级编程——网络编程之API(5)
Linux C网络编程--API 宗旨:技术的学习是有限的,分享的精神的无限的. 一.基本socket函数 Linux系统是通过提供套接字(socket)来进行网络编程的.网络的so ...
- Linux C高级编程——网络编程之UDP(4)
Linux网络编程--UDP 宗旨:技术的学习是有限的,分享的精神是无限的. 下面分析一帧基于UDP的TFTP协议帧. 以太网首部 0000: 00 05 5d 67 d0 b1 00 05 5d 6 ...
- Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解
Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解 (1)sockaddr struct sockaddr { unsigned short sa_ ...
- Linux网络编程之IP地址转换为无符号整数的方法
Linux网络编程之IP地址转换为无符号整数的方法,代码如下:(没考虑异常输入) #include <stdio.h> #include <string.h> #include ...
- Linux网络编程之TCP状态转移
Linux网络编程之TCP状态转移 一.TCP状态转移时序 二.半关闭及shutdown函数 一.TCP状态转移时序 TCP状态转移图: netstat -apn | grep client 查看客户 ...
- 网络编程之socket
网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...
- Python中的网络编程之TCP
Python中的网络编程之TCP 文章目录 Python中的网络编程之TCP 1.TCP介绍 2.TCP特点 3.TCP与UDP的不同点 4.tcp通信模型 5.tcp客户端 6.tcp服务器 7.T ...
最新文章
- PHP哈希表碰撞攻击原理
- 关于批量修改AD域用户的脚本
- Object-C代码练习【自定义对象的归档】
- 用c# 实现设计器 DesignSurface
- python3.6安装opencv-python3.6、opencv安装环境搭建过程(图文教程)
- 泛型(比较杂 后期整理)
- 8.36人一次搬36块砖,男搬4,女搬2,两个小孩抬一块,要一次搬完。问:男、女、小孩各多少?
- 顶级程序员的生活是怎样的? 网友: 很后悔, 找不到女朋友!
- jeesite缓存问题
- [转载] Java ArrayList toArray(T[] a) 解惑
- 人脸识别dlib库 记录
- 请检查virtualboxapi是否正确安装_MBR膜组件安装施工方案指南
- VMware windows server 2008配置dns服务
- 【Learning】 动态树分治
- IDEA快捷键拆解系列(七):Analyze篇
- 是时候开始好好考虑自己的职业定位了
- ccs6.0 破解版安装教程 Code Composer Studio安装教程
- WinMTR-路由追踪软件
- 云痕大数据 家长登录_云痕大数据——苏州云痕教育科技有限公司
- CentOS7安装RabbitMQ(解决guest用户无法登录问题)
热门文章
- mathtype 嵌入word后显示灰色怎么办?
- 2022年9月电子学会Python等级考试试卷(四级)答案解析
- 机房收费系统系列一:运行时错误‘-2147217843(80040e4d)’;用户‘sa’登陆失败
- 解决Vmware虚拟机偶尔黑屏
- Eclipse安装详细教程
- 国产降噪耳机哪款降噪效果好?降噪效果好的降噪耳机推荐
- Python遍历二重数组
- iOS中内存管理问题
- html如何批量查找数字,WPS2019如何批量查找数字 WPS文字如何批量替换数字
- mysql like模糊查询表名_mysql模糊查询like/REGEXP