如何在MacOS上发送原始数据包?



如何在Python中使用Raw Socket ?

我看到下面的代码是用来发送原始数据包的。

s = socket(AF_PACKET, SOCK_RAW)
s.bind(("eth1", 0))
...
s.send(dst_addr+src_addr+ethertype+payload+checksum)

但是当我在Mac上尝试时,我看到了这个。我不确定在MacOS上发送原始数据包的适当方式是什么。谁能告诉我一声?

NameError: name 'AF_PACKET' is not defined

这是macOS帮助页面上显示的内容。有合适的吗?

|  AF_APPLETALK = <AddressFamily.AF_APPLETALK: 16>
|
|  AF_INET = <AddressFamily.AF_INET: 2>
|
|  AF_INET6 = <AddressFamily.AF_INET6: 30>
|
|  AF_IPX = <AddressFamily.AF_IPX: 23>
|
|  AF_LINK = <AddressFamily.AF_LINK: 18>
|
|  AF_ROUTE = <AddressFamily.AF_ROUTE: 17>
|
|  AF_SNA = <AddressFamily.AF_SNA: 11>
|
|  AF_SYSTEM = <AddressFamily.AF_SYSTEM: 32>
|
|  AF_UNIX = <AddressFamily.AF_UNIX: 1>
|
|  AF_UNSPEC = <AddressFamily.AF_UNSPEC: 0>

示例

import socket
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock:
packet = create_packet()
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.sendto(packet, (ip, port))
import socket
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.connect(("localhost", 8080))
socket.send("content")
socket.close()

下面是一个示例python文件,发送wakeonlan魔术包。

  • https://github.com/HuakunShen/wol/blob/master/wol-py/wol.py

下面是来自套接字文档

的一些示例
  • https://docs.python.org/3/library/socket.html示例

最新更新