Esempio n. 1
0
def generate_packet(src, data):
    min_size = ethhdr.min_size + ip4hdr.min_size + udphdr.min_size
    packet = bytearray(len(data) + min_size)

    eth = ethhdr(
        {
            'src': src,
            'dst': pnet.HWAddress(u'ff:ff:ff:ff:ff:ff'),
            'type': pnet.ETH_P_IP
        },
        buf=packet)

    ip4 = ip4hdr(
        {
            'dst': ipaddress.IPv4Address(u'255.255.255.255'),
            'proto': socket.IPPROTO_UDP,
            'len': len(data) + ip4hdr.min_size + udphdr.min_size
        },
        buf=eth.payload)

    udp = udphdr({
        'sport': 68,
        'dport': 67,
        'len': len(data) + udphdr.min_size
    },
                 buf=ip4.payload)

    ip4['csum'] = pnet.checksum(ip4.tobytes())
    udp['csum'] = pnet.ipv4_checksum(ip4, udp, data)
    udp.payload = data
    return packet
Esempio n. 2
0
    def __init__(self, ifname):
        self.ifname = ifname
        self.poll = select.epoll()
        self.sock = socket.socket(socket.AF_PACKET, socket.SOCK_RAW,
                                  socket.htons(pnet.ETH_P_ALL))
        self.poll.register(
            self.sock,
            select.POLLIN | select.POLLPRI | select.POLLHUP | select.POLLERR)
        attach_filter(self.sock, bootp_filter())
        self.sock.setblocking(0)
        self.sock.bind((ifname, 3))

        ifreq = get_ifreq(self.sock, ifname)
        self.src = pnet.HWAddress(ifreq[18:24])
Esempio n. 3
0
 def __init__(self, opcode, buf=None, **kwargs):
     self.opcode = opcode
     self.htype = 1  # Ethernet
     self.hops = 0
     self.xid = kwargs.get('xid')
     self.secs = kwargs.get('secs', 0)
     self.flags = kwargs.get('flags', 0)
     self.ciaddr = kwargs.get('ciaddr', b'\x00' * 4)
     self.yiaddr = kwargs.get('yiaddr', b'\x00' * 4)
     self.siaddr = kwargs.get('siaddr', b'\x00' * 4)
     self.giaddr = kwargs.get('giaddr', b'\x00' * 4)
     self.chaddr = pnet.HWAddress(kwargs['chaddr'])
     self.options = Options(kwargs.get('options', []))
     if not self.xid:
         self.xid = os.urandom(4)
Esempio n. 4
0
def test_parse_hwaddress(data):
    address = pnet.HWAddress(data)
    assert bytes(address) == data
    assert set(str(address)) <= set('0123456789abcdef:')
Esempio n. 5
0
def test_parse_invalid_hwaddress_string(data):
    with pytest.raises(ValueError):
        pnet.HWAddress(data)
Esempio n. 6
0
def test_parse_valid_hwaddress_string(data):
    address = pnet.HWAddress(data)
    assert str(address) == data.replace('-', ':')