802.11中的各种帧

在无线网络中,802.11协议定义了三种类型的帧:管理帧(Management Frames)、控制帧(Control Frames)和数据帧(Data Frames)。每种类型的帧都有其特定的功能,帮助维护和管理无线网络。下面是管理帧和控制帧的详细介绍:

管理帧(Management Frames)

管理帧用于建立和维护无线网络中的连接。它们帮助设备发现网络、加入或离开网络,并保持连接的状态。常见的管理帧包括:

  1. Beacon Frames(信标帧)

    • 由接入点(AP)定期发送,以公告其存在和网络参数(如SSID、支持的数据速率、安全设置等)。
    • 帮助设备发现并选择要连接的无线网络。
  2. Probe Request/Response Frames(探测请求/响应帧)

    • 探测请求帧由客户端设备发送,用于主动扫描可用的无线网络。
    • 探测响应帧由AP发送,以响应探测请求帧,提供网络信息。
  3. Authentication Frames(认证帧)

    • 用于设备和AP之间的身份验证过程。
    • 确保设备是合法用户,可以加入网络。
  4. Deauthentication Frames(解除认证帧)

    • 用于终止设备和AP之间的认证关系。
    • 通常在设备离开网络或发生安全事件时发送。
  5. Association Request/Response Frames(关联请求/响应帧)

    • 关联请求帧由客户端设备发送,用于请求与AP建立连接。
    • 关联响应帧由AP发送,以确认或拒绝连接请求。
  6. Disassociation Frames(解除关联帧)

    • 用于终止设备和AP之间的关联关系。
    • 通常在设备离开网络或需要重新建立连接时发送。

控制帧(Control Frames)

控制帧用于帮助管理数据传输过程,确保数据帧在无线网络中的可靠传输。常见的控制帧包括:

  1. ACK Frames(确认帧)

    • 由接收方发送,以确认成功接收到数据帧。
    • 发送方在接收到ACK帧后,会继续发送下一个数据帧。
  2. RTS Frames(请求发送帧)

    • 由发送方发送,用于请求对信道的使用权限。
    • 用于减少冲突,特别是在高流量或干扰环境中。
  3. CTS Frames(清除发送帧)

    • 由接收方发送,以响应RTS帧,授予发送方对信道的使用权限。
    • 通过CTS帧,网络中的其他设备知道发送方将占用信道,并避免冲突。
  4. PS-Poll Frames(省电轮询帧)

    • 由省电模式的客户端设备发送,用于请求AP发送缓冲的数据帧。
    • 帮助省电模式下的设备高效地接收数据。
  5. Block Acknowledgement Frames(块确认帧)

    • 用于高效确认一组数据帧,而不是每个帧单独确认。
    • 提高传输效率,特别是在高速无线网络中。

捕获管理帧和控制帧

在监控模式下,可以使用 tcpdumpgopacket 捕获管理帧和控制帧。以下是捕获所有管理帧和控制帧的示例:

  1. 使用 tcpdump 捕获管理帧和控制帧

sudo tcpdump -i wlan0mon -e -s 0 type mgt or type ctl
  1. 使用 gopacket 捕获和解析管理帧和控制帧的 Go 代码

package main

import (
    "fmt"
    "log"

    "github.com/google/gopacket"
    "github.com/google/gopacket/layers"
    "github.com/google/gopacket/pcap"
)

func main() {
    // 设置网络接口名称和抓包过滤器
    iface := "wlan0mon"
    snaplen := int32(65535)
    promisc := false
    timeout := pcap.BlockForever
    filter := "type mgt or type ctl"

    // 打开网络接口进行抓包
    handle, err := pcap.OpenLive(iface, snaplen, promisc, timeout)
    if err != nil {
        log.Fatal(err)
    }
    defer handle.Close()

    // 设置 BPF 过滤器
    if err := handle.SetBPFFilter(filter); err != nil {
        log.Fatal(err)
    }
    fmt.Println("Capturing Wi-Fi Management and Control frames on interface", iface)

    // 开始抓包
    packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
    for packet := range packetSource.Packets() {
        processPacket(packet)
    }
}

func processPacket(packet gopacket.Packet) {
    // 获取 802.11 层
    dot11Layer := packet.Layer(layers.LayerTypeDot11)
    if dot11Layer == nil {
        return
    }
    dot11, _ := dot11Layer.(*layers.Dot11)
    
    // 判断帧类型
    switch dot11.Type {
    case layers.Dot11TypeMgmt:
        fmt.Println("Management Frame captured:")
        // 处理管理帧,获取具体类型
        switch dot11.Subtype {
        case layers.Dot11MgmtSubtypeBeacon:
            fmt.Println("  Beacon Frame")
        case layers.Dot11MgmtSubtypeProbeReq:
            fmt.Println("  Probe Request Frame")
        case layers.Dot11MgmtSubtypeProbeResp:
            fmt.Println("  Probe Response Frame")
        // 可以添加更多管理帧类型
        default:
            fmt.Println("  Other Management Frame")
        }
    case layers.Dot11TypeCtrl:
        fmt.Println("Control Frame captured:")
        // 处理控制帧,获取具体类型
        switch dot11.Subtype {
        case layers.Dot11ControlSubtypeAck:
            fmt.Println("  ACK Frame")
        case layers.Dot11ControlSubtypeRTS:
            fmt.Println("  RTS Frame")
        case layers.Dot11ControlSubtypeCTS:
            fmt.Println("  CTS Frame")
        // 可以添加更多控制帧类型
        default:
            fmt.Println("  Other Control Frame")
        }
    default:
        fmt.Println("Other Frame Type captured")
    }
}

总结

管理帧和控制帧在无线网络中起着关键作用,分别用于建立和维护连接,以及管理数据传输过程。在监控模式下,你可以使用工具如 tcpdump 或编程库如 gopacket 来捕获和分析这些帧,了解无线网络的工作状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值