Python 套接字。错误[Errno 99]无法分配请求的地址

Python 套接字。错误[Errno 99]无法分配请求的地址,python,sockets,Python,Sockets,昨天,我创建了一个名为sniffer\u ip\u header\u decode.py的python脚本,但出现以下错误: Traceback (most recent call last): File "sniffer_ip_header_decode.py", line 51, in <module> sniffer.bind((host, 0)) File "/usr/lib/python2.7/socket.py", line 228, in meth

昨天,我创建了一个名为
sniffer\u ip\u header\u decode.py
的python脚本,但出现以下错误:

Traceback (most recent call last):
  File "sniffer_ip_header_decode.py", line 51, in <module>
    sniffer.bind((host, 0))
  File "/usr/lib/python2.7/socket.py", line 228, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 99] Cannot assign requested address
回溯(最近一次呼叫最后一次):
文件“sniffer\u ip\u header\u decode.py”,第51行,在
sniffer.bind((主机,0))
文件“/usr/lib/python2.7/socket.py”,第228行,meth格式
返回getattr(self.\u sock,name)(*args)
socket.error:[Errno 99]无法分配请求的地址
代码如下:

import socket
import os
import struct
from ctypes import *

#host to listen on
host = "192.168.0.187"

#our IP header
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_sum",   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):  

        #map protocol constants to theyr names
        self.protocol_map = {1:"ICMP", 6:"TCP", 17:"UDP"}

        #Human readable IP addresses
        self.src_address = socket.inet_ntoa(struct.pack("<L",self.src))
        self.dst_address = socket.inet_ntoa(struct.pack("<L",self.dst))

        #Human readable protocol
        try: 
            self.protocol = self.protocol_map[seld.protocol_num]
        except: 
            self.protocol = str(self.protocol_num)

#This should look familiar from the previous example
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: 
        #read in a packet
        raw_buffer = sniffer.recvfrom(65565)[0]

        #create an IP header from the first 20 bytes of the buffer
        ip_header = IP(raw_buffer[0:20])

        #print out the protocol that was detected and the host
        print "Protocol: %s %s -> %s" % (ip_header.protocol, ip_header.src_address, ip_header.dst_address)
#Handle CTRL - C
except KeyboardInterrupt: 

    #if we're using windows. turn off promiscuous mode
    if os.name == "nt": 
        sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)   
导入套接字
导入操作系统
导入结构
从ctypes导入*
#主持人收听
host=“192.168.0.187”
#我们的IP头
IP类(结构):
字段=[
(《国际人道主义法》,c_ubyte,4),
(“版本”,c_ubyte,4),
(“托斯”,c_ubyte),
(“len”,c_ushort),
(“id”,c_ushort),
(“偏移量”,c_ushort),
(“ttl”,c_ubyte),
(“总协议”,c_ubyte),
(“sum”,c_ushort),
(“src”,c_ulong),
(“dst”,c_ulong),
]
定义新(自,套接字缓冲区=无):
从缓冲区返回自我副本(套接字缓冲区)
定义初始化(自,套接字缓冲区=无):
#将协议常量映射到它们的名称
self.protocol_map={1:“ICMP”,6:“TCP”,17:“UDP”}
#人类可读的IP地址
self.src_address=socket.inet_ntoa(struct.pack)(“此行错误:

host = "192.168.0.187"
变量“host”必须是有效的IP,您可以使用您的IP