Beispiel #1
0
    def to_dataframe(self, n=-1):
        packets = []

        def decode_ip_packet(header, data):
            seconds, fractional = header.getts(
            )  # fractional is in microseconds
            ts = seconds * 10**9 + fractional * 10**3  # convert to nanoseconds

            packet = IPPacket(data)

            if self._payload:
                return FullPacket(ts, packet.source_ip_address,
                                  packet.source_ip_port,
                                  packet.destination_ip_address,
                                  packet.destination_ip_port,
                                  packet.ip_protocol,
                                  data[packet.header_size:])

            return BasePacket(ts, packet.source_ip_address,
                              packet.source_ip_port,
                              packet.destination_ip_address,
                              packet.destination_ip_port, packet.ip_protocol)

        def decoder(header, data):
            packets.append(decode_ip_packet(header, data))

        self._reader.setfilter(self._bpf)
        self._reader.loop(n, decoder)

        columns = FullPacket._fields if self._payload else BasePacket._fields
        df = pd.DataFrame(packets, columns=columns)

        # DataFrame.astype doesn't work with extension types (yet).
        # https://github.com/pandas-dev/pandas/issues/20557
        known_types = {
            k: v
            for k, v in self.dtype.items() if k not in ('src_host', 'dst_host')
        }
        df = df.astype(known_types)
        df['src_host'] = to_ipaddress(df['src_host'])
        df['dst_host'] = to_ipaddress(df['dst_host'])
        return df
Beispiel #2
0
def test_equality():
    v1 = ip.to_ipaddress([
        u'192.168.1.1',
        u'2001:0db8:85a3:0000:0000:8a2e:0370:7334',
    ])
    assert np.all(v1 == v1)
    assert v1.equals(v1)

    v2 = ip.to_ipaddress([
        u'192.168.1.2',
        u'2001:0db8:85a3:0000:0000:8a2e:0370:7334',
    ])
    result = v1 == v2
    expected = np.array([False, True])
    tm.assert_numpy_array_equal(result, expected)

    result = bool(v1.equals(v2))
    assert result is False

    with pytest.raises(TypeError):
        v1.equals("a")
Beispiel #3
0
def test_isip():
    v = ip.to_ipaddress([
        u'192.168.1.1',
        u'2001:0db8:85a3:0000:0000:8a2e:0370:7334',
    ])
    result = v.is_ipv4
    expected = np.array([True, False])
    tm.assert_numpy_array_equal(result, expected)

    result = v.is_ipv6
    expected = np.array([False, True])
    tm.assert_numpy_array_equal(result, expected)