RAWソケットプログラミング(イーサフレーム応用編)
ここではRAWソケットを用いてARP応答パケットを作成してみます。ARP応答のフォーマットに従って、ポチポチと値を入れていきます。
ARP応答のフォーマット
書き途中
RAWソケットでのプログラミング例
#!/usr/bin/env python from socket import * rawSocket = socket(AF_PACKET, SOCK_RAW) rawSocket.bind(("eth1", 0)) class ether_flame: def __init__(self, src_mac, dst_mac, ethertype): self.src_mac = src_mac self.dst_mac = dst_mac self.ethertype = ethertype def string(self): return self.dst_mac + self.src_mac + self.ethertype class arp_reply_packet: def __init__(self, src_mac, src_ip, dst_mac, dst_ip, hw_type="\x00\x01", proto="\x08\x00", h_len="\x06", p_len="\x04", opcode="\x00\x02"): self.hw_type = hw_type self.proto = proto self.h_len = h_len self.p_len = p_len self.opcode = opcode self.src_mac = src_mac self.src_ip = src_ip self.dst_mac = dst_mac self.dst_ip = dst_ip def string(self): return self.hw_type + self.proto + self.h_len + self.p_len + self.opcode + self.src_mac + self.src_ip + self.dst_mac + self.dst_ip SRC_MAC = "\x11\x11\x11\x11\x11\x11" DST_MAC = "\x22\x22\x22\x22\x22\x22" ETHER_TYPE = "\x08\x06" SRC_IP = "\xc0\xa8\x38\x66" DST_IP = "\xc0\xa8\x38\x67" flame = ether_flame(SRC_MAC, DST_MAC, ETHER_TYPE) arp_reply = arp_reply_packet(SRC_MAC, DST_MAC, SRC_IP, DST_IP) rawSocket.send(flame.string() + arp_reply.string()) ~