Unix가 원시 이더넷 프레임을 보내고 전송하는 방법

Unix가 원시 이더넷 프레임을 보내고 전송하는 방법

TCP가 아닌 이더넷용 netcat과 같은 원시 이더넷 데이터를 보내고 싶습니다. 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/

관련 정보