繁体   English   中英

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

[英]How to send raw packet on 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()

这是一个发送 wakeonlan 魔术数据包的示例 python 文件。

以下是套接字文档中的一些示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM