SDN-OpenFlow1,2024年最新不看绝对血亏

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
img

正文

在include->openflow->openflow.h中

白皮书openflow-spec-v1.0.0.pdf也在里面

OpenFlow交换机流表

OpenFlow交换机中的转发表称为流表(Flow Table),列表中的每个条目称为表项,每个表项包括三个域,包头域(header field)计数器(counters)行动(actions)

包头域

数据包匹配特征:

  1. 一层:交换机入端口(Ingress Port)
  2. 二层:源MAC地址(Ether source)、目的MAC地址(Ether dst)、以太网类型(Ether Type)、VLAN标签(VLAN id)、VLAN优先级(VLAN priority)
  3. 三层:源IP(IP src)、目的IP(IP dst)、IP协议字段(IP proto)、IP服务类型(IPToS bits)
  4. 四层:TCP/UDP源端口号(TCP/UDP src port)、TCP/UDP目的端口号(TCP/UDP dst port)

包头域/匹配字段
| Ingress Port | Ether Source | Ether st | Ether type | VLAN id | VLAN priority | IP src | IP dst | IP proto | IP ToS bits | TCP/UDP src port | TCP/UDP dst port |

对数据包匹配特征的描述

/ *与流量匹配的字段* /
struct ofp_match {
    uint32_t wildcards;            / *通配符字段。 * /
    uint16_t in_port;              / *输入开关端口。 * /
    uint8_t dl_src [OFP_ETH_ALEN]; / *以太网源地址。 * /
    uint8_t dl_dst [OFP_ETH_ALEN]; / *以太网目标地址。 * /
    uint16_t dl_vlan;              / *输入VLAN ID。 * /
    uint8_t dl_vlan_pcp;           / *输入VLAN优先级。 * /
    uint8_t pad1 [1];              / *对齐64位* /
    uint16_t dl_type;              / *以太网帧类型。 * /
    uint8_t nw_tos;               / * IP ToS(实际上是DSCP字段,6位)。 * /
    uint8_t nw_proto;             / * IP协议或以下的低8位
                                 * ARP操作码。 * /
    uint8_t pad2 [2];             / *对齐64位* /
    uint32_t nw_src;             / * IP源地址。 * /
    uint32_t nw_dst;             / * IP目标地址。 * /
    uint16_t tp_src;             / * TCP / UDP源端口。 * /
    uint16_t tp_dst;             / * TCP / UDP目标端口。 * /
};

相对于前面所说,多了三个字段,分别是wildcards、pad1[1]、pad2[2],作用如翻译所写。

wildcards字段

/ *流通配符。 * /
enum of_p_flow_wildcards{
    OFPFW_IN_PORT = 1 << 0,/ *开关输入端口。 * /
    OFPFW_DL_VLAN = 1 << 1,/ * VLAN ID。 * /
    OFPFW_DL_SRC = 1 << 2,/ *以太网源地址。 * /
    OFPFW_DL_DST = 1 << 3,/ *以太网目标地址。 * /
    OFPFW_DL_TYPE = 1 << 4,/ *以太网帧类型。 * /
    OFPFW_NW_PROTO = 1 << 5,/ * IP协议。 * /
    OFPFW_TP_SRC = 1 << 6,/ * TCP / UDP源端口。 * /
    OFPFW_TP_DST = 1 << 7,/ * TCP / UDP目标端口。 * /

    / * IP源地址通配符位数。 0是完全匹配,1则忽略
     * LSB,2忽略2个最低有效位,...,32和更高的通配符
     *整个领域。这与通常的约定相反
     *例如/ 24表示通配符为8位(不是24位)。 * /
    OFPFW_NW_SRC_SHIFT = 8
    OFPFW_NW_SRC_BITS = 6
    OFPFW_NW_SRC_MASK =(((1 << OFPFW_NW_SRC_BITS)-1)<< OFPFW_NW_SRC_SHIFT,
    OFPFW_NW_SRC_ALL = 32 << OFPFW_NW_SRC_SHIFT,

    / * IP目标地址通配符位数。与源格式相同。 * /
    OFPFW_NW_DST_SHIFT = 14
    OFPFW_NW_DST_BITS = 6
    OFPFW_NW_DST_MASK =(((1 << OFPFW_NW_DST_BITS)-1)<< OFPFW_NW_DST_SHIFT,
    OFPFW_NW_DST_ALL = 32 << OFPFW_NW_DST_SHIFT,

    OFPFW_DL_VLAN_PCP = 1 << 20,/ * VLAN优先级。 * /
    OFPFW_NW_TOS = 1 << 21,/ * IP ToS(DSCP字段,6位)。 * /

    / *通配所有字段。 * /
    OFPFW_ALL =((1 << 22)-1)
};

wildcards字段
| 22-31 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 保留 | IP服务类型 | VLAN优先级 | 目的IP | 源IP | 目的端口 | 源端口 | IP协议字段 | 以太网类型 | 目的MAC | 源MAC | VLAN标签 | 入端口 |

除源IP和目的IP以外,掩码位为0表示对应匹配项需要精确匹配,掩码为为1表示忽略匹配项。
源IP和目的IP字段的掩码表示32bit lP地址可以忽略匹配的长度。
如果源IP的掩码为8(wildcard的8-13bit为001000),表示源IP字段的高24bit需要精确匹配,源IP字段的低8bit可以忽略。

计数器

计数器可以针对每张表、每个流、每个端口、每个队列来维护。用来统计流量的一些信息,例如活动表项、查找次数、发送包数等。

行动

OpenFlow1.0.0提供多种行动,前两个必备:

丢弃(Drop)

没有明确指明处理行动的表项,所匹配的所有网包默认丢弃。

转发(Forward)

  • ALL转发到所有出口(不包括入口)
  • CONTROLLER封装并转发给控制器
  • LOCAL转发给本地网络栈
  • TABLE对要发出的包执行流表中的行动
  • IN PORT从入口发出

修改包头(Modify field)

  • SET_VLAN_VID 修改VLAN标签
  • SET_VLAN_PCP 修改VLAN优先级
  • STRIP_VLAN 弹出VLAN标签
  • SET_DL_SRC 修改源MAC地址
  • SET_DL_DST 修改目的MAC地址
  • SET_NW_SRC 修改源IP地址
  • SET_NW_DST 修改目的IP地址
  • SET_NW_TOS 修改IP服务类型字段
  • SET_TP_SRC 修改源端口号
  • SET_TP_DST 修改目的端口号

以上每一种操作称为一个动作(Action),流表中的数据包处理方法是一个动作列表(Action List),动作列表由以上各种动作组合合成。

Action的头

/ *所有动作共有的头。 长度包括
  *头和用于使操作64位对齐的任何填充。
  *注意:动作的长度*必须*始终是8的倍数。 * /
struct ofp_action_header {
     uint16_t type; / * OFPAT_ *之一。 * /
     uint16_t len; / *动作时长,包括此
                      头。 这是行动的时长,
                      包括任何填充物
                      64位对齐。 * /
     uint8_t pad [4];
};

其中,type字段为以下之一

enum of_p_action_type{
     OFPAT_OUTPUT,      / *输出到交换机端口。 * /
     OFPAT_SET_VLAN_VID,/ *设置802.1q VLAN ID。 * /
     OFPAT_SET_VLAN_PCP,/ *设置802.1q优先级。 * /
     OFPAT_STRIP_VLAN,  / *剥离802.1q标头。 * /
     OFPAT_SET_DL_SRC,  / *以太网源地址。 * /
     OFPAT_SET_DL_DST,  / *以太网目标地址。 * /
     OFPAT_SET_NW_SRC,  / * IP源地址。 * /
     OFPAT_SET_NW_DST,  / * IP目标地址。 * /
     OFPAT_SET_NW_TOS,  / * IP ToS(DSCP字段,6位)。 * /
     OFPAT_SET_TP_SRC,  / * TCP / UDP源端口。 * /
     OFPAT_SET_TP_DST,  / * TCP / UDP目标端口。 * /
     OFPAT_ENQUEUE,     / *输出到队列。 * /
     OFPAT_VENDOR = 0xffff
};

其中OFPAT_OUTPUT和OFPAT_ENQUEUE为转发操作,其他类型为修改包头操作

OUTPUT类型

/ * OFPAT_OUTPUT的操作结构,该结构将数据包从“端口”发送出去。
  *当“端口”为OFPP_CONTROLLER时,“ max_len”表示最大
  *要发送的字节数。 “ max_len”为零表示没有字节
  *数据包应该发送。* /
struct ofp_action_output {
     uint16_t type;     / * OFPAT_OUTPUT。 * /
     uint16_t len;     / *长度为8。* /
     uint16_t port;     / *输出端口。 * /
     uint16_t max_len; / *要发送到控制器的最大长度。 * /
};

output类型Action的结构包含一个port参数和一个max_len参数Port参数指定了数据包的输出端口,输出端口可以是交换机的一个实际物理端口,也可以是一下虚拟端口

  • ALL:将数据包从除入端口以外其他所有端口发出
  • CONTROLLER:将数据包发送给控制器
  • LOCAL:将数据包发送给交换机本地端口>TABLE:将数据包按照流表匹配条目处理
  • IN_PORT:将数据包从入端口发出
  • NORMAL:按照普通二层交换机流程处理数据包
  • FLOOD:将数据包从最小生成树使能端口转发(不包括入端口)当port为CONTROLLER时,max_len指定了发给CONTROLLER的数据包最大长度。当port为其他参数时,max_len无意义。

ENQUEUE类型

/ * OFPAT_ENQUEUE操作结构:将数据包发送到端口上的给定队列。 * /
struct ofp_action_enqueue {
     uint16_t type; / * OFPAT_ENQUEUE。 * /
     uint16_t len; / * Len是16。* /
     uint16_t port; / *队列所属的端口。 应该
                       引用有效的物理端口
                     (即<OFPP_MAX)或OFPP_IN_PORT。 * /
     uint8_t pad [6]; / * pad用于64位对齐。 * /
     uint32_t queue_id; / *将数据包放入队列的位置。 * /
};

VLAN_VID类型——修改VLAN的ID

/ * OFPAT_SET_VLAN_VID的操作结构。 * /
struct ofp_action_vlan_vid {
     uint16_t type;      / * OFPAT_SET_VLAN_VID。 * /
     uint16_t len;       / *长度为8。* /
     uint16_t vlan_vid; / * VLAN ID。 * /
     uint8_t  pad [2];
};

VLAN_PCP类型——修改VLAN优先级

/ * OFPAT_SET_VLAN_PCP的操作结构。 * /
struct ofp_action_vlan_pcp {
     uint16_t类型;     / * OFPAT_SET_VLAN_PCP。 * /
     uint16_t len;     / *长度为8。* /
     uint8_t vlan_pcp; / * VLAN优先级。 * /
     uint8_t pad [3];
};

DL_ADDR类型——修改MAC地址

/ * OFPAT_SET_DL_SRC / DST的操作结构。 * /
struct ofp_action_dl_addr {
     uint16_t type; / * OFPAT_SET_DL_SRC / DST。 * /
     uint16_t len; / *长度为16。* /
     uint8_t  dl_addr [OFP_ETH_ALEN]; / *以太网地址。 * /
     uint8_t  pad [6];
};

NW_ADDR类型——修改IP地址

/ * OFPAT_SET_NW_SRC / DST的操作结构。 * /
struct ofp_action_nw_addr {
     uint16_t类型; / * OFPAT_SET_TW_SRC / DST。 * /
     uint16_t len; / *长度为8。* /
     uint32_t nw_addr; /* IP地址。 * /
};

NW_TOS类型——修改IP服务类型

/ * OFPAT_SET_NW_TOS的操作结构。 * /
struct ofp_action_nw_tos {
     uint16_t类型; / * OFPAT_SET_TW_SRC / DST。 * /
     uint16_t len; / *长度为8。* /
     uint8_t nw_tos; / * IP ToS(DSCP字段,6位)。 * /
     uint8_t pad [3];
};

TP_PORT类型——修改传输层端口号

/ * OFPAT_SET_TP_SRC / DST的操作结构。 * /
struct ofp_action_tp_port {
     uint16_t类型; / * OFPAT_SET_TP_SRC / DST。 * /
     uint16_t len; / *长度为8。* /
     uint16_t tp_port; / * TCP / UDP端口。 * /
     uint8_t pad [2];
};

流表匹配

整体匹配流程

包头解析匹配流程

OpenFlow消息

Openflow消息总共分为三大类:
1、Controller-to-Switch(控制器至交换机消息),此类消息由控制器主动发出

  • Features 在建立传输层安全会话的时候,控制器发送feature请求(OFPT_FEATURES_REQUEST)消息给交换机,交换机需要应答(OFPT_FEATURES_REPLY)自身支持的功能。
  • Configuration 控制器设置或查询交换机上的配置信息。交换机仅需要应答查询消息
  • Modify-State  控制器管理交换机流表项和端口状态等。
  • Read-State 用来读取交换机流表、端口状态
  • Send-Packet 用来通过指定端口发送数据包
  • Barrier 控制器确保消息依赖满足,或接收完成操作的通知(OFPT_BARRIER_REQUEST、OFPT_BARRIER_REPLY

/ *交换机配置消息。 * /

OFPT_FEATURES_REQUEST,

OFPT_FEATURES_REPLY,

OFPT_GET_CONFIG_REQUEST,

OFPT_GET_CONFIG_REPLY,

OFPT_SET_CONFIG,

/ *控制器命令消息。 * /

OFPT_PACKET_OUT,

OFPT_FLOW_MOD,

OFPT_PORT_MOD,

/ *统计信息。 * /

OFPT_STATS_REQUEST,

OFPT_STATS_REPLY,

/ *障碍消息。 * /

OFPT_BARRIER_REQUEST,

OFPT_BARRIER_REPLY,

/ *队列配置消息。 * /

OFPT_QUEUE_GET_CONFIG_REQUEST,

OFPT_QUEUE_GET_CONFIG_REPLY

2、Asynchronous(异步消息),此类消息由交换机主动发出

  • Packet-in 用来告知控制器交换机接收到数据包
  • Flow-Removed用来告知控制器交换机流表被删除>Port-Status用来告知控制器交换机端口状态更新
  • Error用来告知控制器交换机发生错误

OFPT_PACKET_IN,

OFPT_FLOW_REMOVED,

OFPT_PORT_STATUS,

OFPT_ERROR,

3、Symmetric(对称消息),此类消息可以由控制器或交换机主动发起

  • Hello用来建立Openflow连接
  • Echo用来确认交换机与控制器之间的连接状态
  • Vendor厂商自定义消息

OFPT_HELLO,

OFPT_ECHO_REQUEST,

OFPT_ECHO_REPLY,

OFPT_VENDOR,

OpenFlow消息格式

OpenFlow协议数据包由OpenFlow Header和OpenFlow Message两部分组成

OpenFlow的头

/ *所有OpenFlow数据包的头。 * /
struct ofp_header {
     uint8_t  version; / * OFP_VERSION。 * /
     uint8_t  type;     / * OFPT_常量之一。 * /
     uint16_t length;  / *长度,包括此ofp_header。 * /
     uint32_t xid;      / *与该数据包关联的交易ID。
                           回复使用与请求中相同的ID
                           方便配对。 * /
};

OpenFlow消息

enum ofp_type{
    / *不可变的消息。 * /
    OFPT_HELLO,       / *对称消息* /
    OFPT_ERROR,       / *对称消息* /
    OFPT_ECHO_REQUEST,/ *对称消息* /
    OFPT_ECHO_REPLY,  / *对称消息* /
    OFPT_VENDOR,     / *对称消息* /

    / *交换机配置消息。 * /
    OFPT_FEATURES_REQUEST,  / *控制器/交换机消息* /
    OFPT_FEATURES_REPLY,    / *控制器/交换机消息* /
    OFPT_GET_CONFIG_REQUEST,/ *控制器/交换机消息* /
    OFPT_GET_CONFIG_REPLY,  / *控制器/交换机消息* /
    OFPT_SET_CONFIG,        / *控制器/交换机消息* /

    / *异步消息。 * /
    OFPT_PACKET_IN,   / *异步消息* /
    OFPT_FLOW_REMOVED,/ *异步消息* /
    OFPT_PORT_STATUS, / *异步消息* /

    / *控制器命令消息。 * /
    OFPT_PACKET_OUT,/ *控制器/交换机消息* /
    OFPT_FLOW_MOD,  / *控制器/交换机消息* /
    OFPT_PORT_MOD,  / *控制器/交换机消息* /

    / *统计消息。 * /
    OFPT_STATS_REQUEST,/ *控制器/交换机消息* /
    OFPT_STATS_REPLY,  / *控制器/交换机消息* /

    / *障碍消息。 * /
    OFPT_BARRIER_REQUEST,/ *控制器/交换机消息* /
    OFPT_BARRIER_REPLY,  / *控制器/交换机消息* /

    / *队列配置消息。 * /
    OFPT_QUEUE_GET_CONFIG_REQUEST,/ *控制器/交换机消息* /
    OFPT_QUEUE_GET_CONFIG_REPLY    / *控制器/交换机消息* /

};

对称消息

如何自学黑客&网络安全

黑客零基础入门学习路线&规划

初级黑客
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(一周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(一周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(一周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k

到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?

如果你想要入坑黑客&网络安全,笔者给大家准备了一份:282G全网最全的网络安全资料包评论区留言即可领取!

7、脚本编程(初级/中级/高级)
在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.

如果你零基础入门,笔者建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习;搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime;·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;·用Python编写漏洞的exp,然后写一个简单的网络爬虫;·PHP基本语法学习并书写一个简单的博客系统;熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选);·了解Bootstrap的布局或者CSS。

8、超级黑客
这部分内容对零基础的同学来说还比较遥远,就不展开细说了,附上学习路线。
img

网络安全工程师企业级学习路线

img
如图片过大被平台压缩导致看不清的话,评论区点赞和评论区留言获取吧。我都会回复的

视频配套资料&国内外网安书籍、文档&工具

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

img
一些笔者自己买的、其他平台白嫖不到的视频教程。
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

,png)
如图片过大被平台压缩导致看不清的话,评论区点赞和评论区留言获取吧。我都会回复的

视频配套资料&国内外网安书籍、文档&工具

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

img
一些笔者自己买的、其他平台白嫖不到的视频教程。
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
[外链图片转存中…(img-hQ7ErbHm-1713364812175)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值