socket.error:[Errno 49]无法分配请求的地址

时间:2017-04-19 09:53:58

标签: python-3.x security

所以我最近在humblebundle上用python买了黑帽黑客

但我有点打砖墙,我希望有人可以帮助或解释为什么会发生这种情况:

我的平台是osx macbook更具体的mjlt2

import socket
import os

# host to listen on
host = "192.168.1.190"

# create raw socket and bind it to public interface
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))

# we want the IP headers included in the capture
sniffer.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)

# if we're using windows need to send an IOCTL
# to set up promiscous mode
if os.name == "nt":
    sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)

# read in a single packet
print(sniffer.recvfrom(65565))

# if we're using window, turn off promiscuous mode
if os.name == "nt":
    sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)

现在这是作者对代码dos和期望内容的解释......

我们首先构造我们的socket对象,其中包含用于在我们的网络接口上捕获数据包的必要参数。 Windows和Linux之间的区别在于,无论协议如何,Windows都允许我们嗅探所有传入的数据包,而Linux迫使我们指出我们正在利用ICMP。请注意,我们使用的是混杂模式,它需要Windows上的管理权限或Linux上的root权限。混杂模式允许我们嗅探网卡看到的所有数据包,甚至那些不是针对您的特定主机的数据包。接下来,我们设置一个套接字选项v,其中包含我们捕获的数据包中的IP头。下一步确定我们是否使用Windows,如果是,我们执行额外的步骤,将IOCTL发送到网卡驱动程序以启用混杂模式。如果您在虚拟机中运行Windows,则可能会得到客户操作系统启用混杂模式的通知;当然,你会允许的。现在我们已经准备好实际执行一些嗅探,在这种情况下,我们只是打印出整个原始数据包x而没有数据包解码。这只是为了测试以确保我们的snif ng代码的核心工作。在嗅探单个数据包之后,我们再次测试Windows,并在退出脚本之前禁用混杂模式。

我对此的理解是我应该能够在nostarch.com上使用它作为一个例子 但唯一能回到我身边的是:

sniffer.bind((host, 0))
OSError: [Errno 49] Can't assign requested address

除非我自己尝试 我不能在路由器上使用它,或者在我当地的appleTv上使用它,或者我只能在我自己的时候得到回复

任何人都可以告诉我,我只能使用这段代码来ping自己吗?它是预期的还是我的网卡或?

//亚历山大 顺便说一句,如果你看到这个Justin Seitz你真棒!好书!

1 个答案:

答案 0 :(得分:0)

好吧,这有点令人尴尬...... 我想我误解了代码的作用!

如果其他人应该在同一本书之后来到这里,那么答案是:

host = "my local ip adress"

它只会收听当地的混合地址 然后返回它应该基于我接下来做什么 如果我打开浏览器并进入google.com,脚本会检查google.com并返回原始IP标头

如果我打开另一个终端并ping某个站点或ip,则返回该

的原始ip头

希望这有助于某人

//亚历山大#小心每个人