Unix 发送/传输原始以太网帧的方式

Unix 发送/传输原始以太网帧的方式

我想发送原始以太网数据,有点像以太网的 netcat,而不是 TCP。在 Unix 上执行此操作的最简单方法是什么?到目前为止,看来我需要编写自己的工具。

答案1

用 Python 实现非常简单,参见Github:在 Python 中发送原始以太网数据包的一种方法

from socket import *
def sendeth(src, dst, eth_type, payload, interface = "eth0"):
  assert(len(src) == len(dst) == 6) # 48-bit ethernet addresses
  assert(len(eth_type) == 2) # 16-bit ethernet type
  s = socket(AF_PACKET, SOCK_RAW)
  s.bind((interface, 0))
  return s.send(src + dst + eth_type + payload)

if __name__ == "__main__":
  print("Sent %d-byte Ethernet packet on eth0" %
  sendeth("\xFE\xED\xFA\xCE\xBE\xEF",
          "\xFE\xED\xFA\xCE\xBE\xEF",
          "\x7A\x05",
          "hello"))

答案2

Scapy 够你用吗?它允许您构建自己的数据包。 → https://www.secdev.org/projects/scapy/

相关内容