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结构体 | 人人学技术相关推荐

  1. (47)LINUX应用编程和网络编程之二Linux文件属性

    Linux下的文件系统为树形结构,入口为/ 树形结构下的文件目录: 无论哪个版本的Linux系统,都有这些目录,这些目录应该是标准的.各个Linux发行版本会存在一些小小的差异,但总体来说,还是大体差 ...

  2. Linux C高级编程——网络编程之TCP(3)

    Linux网络编程(三)--TCP 宗旨:技术的学习是有限的,分享的精神是无限的. 1.TCP段格式 和UDP协议一样也有源端口号和目的端口号,通讯的双方由IP地址和端口号标识.32位序号.32位确认 ...

  3. Linux C高级编程——网络编程之API(5)

    Linux C网络编程--API 宗旨:技术的学习是有限的,分享的精神的无限的.          一.基本socket函数 Linux系统是通过提供套接字(socket)来进行网络编程的.网络的so ...

  4. Linux C高级编程——网络编程之UDP(4)

    Linux网络编程--UDP 宗旨:技术的学习是有限的,分享的精神是无限的. 下面分析一帧基于UDP的TFTP协议帧. 以太网首部 0000: 00 05 5d 67 d0 b1 00 05 5d 6 ...

  5. Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解

    Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解 (1)sockaddr struct sockaddr { unsigned  short  sa_ ...

  6. Linux网络编程之IP地址转换为无符号整数的方法

    Linux网络编程之IP地址转换为无符号整数的方法,代码如下:(没考虑异常输入) #include <stdio.h> #include <string.h> #include ...

  7. Linux网络编程之TCP状态转移

    Linux网络编程之TCP状态转移 一.TCP状态转移时序 二.半关闭及shutdown函数 一.TCP状态转移时序 TCP状态转移图: netstat -apn | grep client 查看客户 ...

  8. 网络编程之socket

    网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...

  9. Python中的网络编程之TCP

    Python中的网络编程之TCP 文章目录 Python中的网络编程之TCP 1.TCP介绍 2.TCP特点 3.TCP与UDP的不同点 4.tcp通信模型 5.tcp客户端 6.tcp服务器 7.T ...

最新文章

  1. PHP哈希表碰撞攻击原理
  2. 关于批量修改AD域用户的脚本
  3. Object-C代码练习【自定义对象的归档】
  4. 用c# 实现设计器 DesignSurface
  5. python3.6安装opencv-python3.6、opencv安装环境搭建过程(图文教程)
  6. 泛型(比较杂 后期整理)
  7. 8.36人一次搬36块砖,男搬4,女搬2,两个小孩抬一块,要一次搬完。问:男、女、小孩各多少?
  8. 顶级程序员的生活是怎样的? 网友: 很后悔, 找不到女朋友!
  9. jeesite缓存问题
  10. [转载] Java ArrayList toArray(T[] a) 解惑
  11. 人脸识别dlib库 记录
  12. 请检查virtualboxapi是否正确安装_MBR膜组件安装施工方案指南
  13. VMware windows server 2008配置dns服务
  14. 【Learning】 动态树分治
  15. IDEA快捷键拆解系列(七):Analyze篇
  16. 是时候开始好好考虑自己的职业定位了
  17. ccs6.0 破解版安装教程 Code Composer Studio安装教程
  18. WinMTR-路由追踪软件
  19. 云痕大数据 家长登录_云痕大数据——苏州云痕教育科技有限公司
  20. CentOS7安装RabbitMQ(解决guest用户无法登录问题)

热门文章

  1. mathtype 嵌入word后显示灰色怎么办?
  2. 2022年9月电子学会Python等级考试试卷(四级)答案解析
  3. 机房收费系统系列一:运行时错误‘-2147217843(80040e4d)’;用户‘sa’登陆失败
  4. 解决Vmware虚拟机偶尔黑屏
  5. Eclipse安装详细教程
  6. 国产降噪耳机哪款降噪效果好?降噪效果好的降噪耳机推荐
  7. Python遍历二重数组
  8. iOS中内存管理问题
  9. html如何批量查找数字,WPS2019如何批量查找数字 WPS文字如何批量替换数字
  10. mysql like模糊查询表名_mysql模糊查询like/REGEXP