如何在接口上获取活动的esid?

2024-04-20 12:02:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望在只使用python标准库的接口上获得活动的esid;我只需要支持Linux环境。我该怎么做?在


Tags: 标准环境linuxesid
1条回答
网友
1楼 · 发布于 2024-04-20 12:02:22

这可以使用^{}^{}调用来完成。在

这段代码看起来有点令人困惑,因为它更像是在C代码中而不是Python中看到的东西,但是它的工作原理是首先以Python数组的形式分配一些内存(我们将在其中放置esid),然后执行一个ioctl调用,该调用将数组修改到位。在

import array
import fcntl
import socket
import struct

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
maxLength = {
    "interface": 16,
    "essid": 32
}
calls = {
    "SIOCGIWESSID": 0x8B1B
}

def getESSID(interface):
    """Return the ESSID for an interface, or None if we aren't connected."""
    essid = array.array("c", "\0" * maxLength["essid"])
    essidPointer, essidLength = essid.buffer_info()
    request = array.array("c",
        interface.ljust(maxLength["interface"], "\0") +
        struct.pack("PHH", essidPointer, essidLength, 0)
    )
    fcntl.ioctl(sock.fileno(), calls["SIOCGIWESSID"], request)
    name = essid.tostring().rstrip("\0")
    if name:
        return name
    return None

相关问题 更多 >