python errno 99 / unknow接口

时间:2018-07-01 15:39:41

标签: python packet-sniffers

我当时正在研究“如何构建一个简单的网络嗅探器”,但是我有很多问题。 我创建了两个脚本(确实很简单),但是在这两个脚本中,每次都会出现错误。

第一个脚本:

import socket
import os
import struct
from ctypes import *

host = "192.168.1.37"

class IP(Structure):
    _fields_ = [
        ("ihl",           c_ubyte, 4),
        ("version",       c_ubyte, 4),
        ("tos",           c_ubyte),
        ("len",           c_ushort),
        ("id",            c_ushort),
        ("offset",        c_ushort),
        ("ttl",           c_ubyte),
        ("protocol_num",  c_ubyte),
        ("sum",           c_ushort),
        ("src",           c_ulong),
        ("dst",           c_ulong),
]

def __new__(self, socket_buffer=None):
    return self.from_buffer_copy(socket_buffer)

def __init__(self, socket_buffer=None):

    self.protocol_map = {1:"ICMP", 6:"TCP", 17:"UDP"}

    self.src_address = socket.inet_ntoa(
        struct.pack("<L",self.src))
    self.dst_address = socket.inet_ntoa(
        struct.pack("<L",self.dst))

if os.name == "nt":
    socket_protocol = socket.IPPROTO_IP
else:
    socket_protocol = socket.IPPROTO_ICMP

sniffer = socket.socket(
    socket.AF_INET,
    socket.SOCK_RAW,
    socket_protocol)

sniffer.bind((host, 0))

sniffer.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)

if os.name == "nt":
    sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
try:
    while true:

        raw_buffer = sniffer.recvfrom(65565)[0]

        ip_header = IP(raw_buffer[0:20])

        print ("Protocol: %s %s -> %s") % (ip_header.protocol, \
               ip_header.src_adress, ip_header.dst_adress)
except KeyboardInterrupt:
    if os.name == "nt":
        sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)

在Android设备上执行时,出现此错误: errno 99 invalid address(我多次更改了主机地址,但什么都没发生)

第二个代码:(使用Scapy真的很容易)

from scapy.all import *

pkts = sniff(iface="eth0", count=10)

当我尝试执行此代码时,出现以下错误: unknown network interface "eth0"(或wlan0等)

希望你能帮助我。

1 个答案:

答案 0 :(得分:0)

如果您是在Android设备上执行此操作,则eth0界面可能不存在/不可用。

您可以尝试get_if_list()来查看可用的界面(时髦)