1

Python 標準ライブラリのみを使用して、インターフェイスでアクティブな ESSID を取得したいと考えています。Linux 環境のみをサポートする必要があります。これどうやってするの?

4

1 に答える 1

2

これは、呼び出しを使用して行うことができます。SIOCGIWESSID ioctl

このコードは、Python ではなく C コードで見られるものに似ているため、少し混乱するように見えるかもしれませんが、基本的には、最初に Python 配列 (ESSID を配置する) の形式でメモリを割り当てることによって機能します。次に、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
于 2013-01-03T15:34:04.887 に答える