python errno 99 / неизвестный интерфейс - PullRequest
0 голосов
/ 01 июля 2018

Я изучал «как построить простой сетевой анализатор», но у меня много проблем. Я создал два сценария (очень просто), но в обоих я каждый раз получаю сообщение об ошибке.

Первый скрипт:

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 ecc ..)

Надеюсь, вы сможете мне помочь.

1 Ответ

0 голосов
/ 02 июля 2018

Если вы выполняете это на устройстве Android, возможно, интерфейс eth0 не существует / недоступен.

Вы можете попробовать get_if_list(), чтобы увидеть, какие интерфейсы доступны (scapy)

...