【发布时间】:2018-01-04 18:53:40
【问题描述】:
所以我最近买了 Black hat hacking with python onumblebundle
但我有点碰壁了,我希望有人可以帮助或向我解释为什么会发生这种情况:
我的平台是 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)
现在这是作者对代码的作用和期望的解释...
我们首先使用网络接口上嗅探数据包所需的参数构造我们的套接字对象。 Windows 和 Linux 之间的区别在于,Windows 将允许我们嗅探所有传入的数据包,而不管协议如何,而 Linux 则强制我们指定我们正在嗅探 ICMP。请注意,我们使用的是混杂模式,这需要 Windows 上的管理权限或 Linux 上的 root 权限。混杂模式允许我们嗅探网卡看到的所有数据包,甚至那些不是发往您特定主机的数据包。接下来,我们设置一个套接字选项,其中包括我们捕获的数据包中的 IP 标头。下一步是确定我们是否使用 Windows,如果是,我们执行向网卡驱动程序发送 IOCTL 以启用混杂模式的附加步骤。如果您在虚拟机中运行 Windows,您可能会收到客户操作系统启用混杂模式的通知;你当然会允许它。现在我们已经准备好实际执行一些嗅探了,在这种情况下,我们只是打印出整个原始数据包 x 没有数据包解码。这只是为了测试以确保我们的嗅探代码的核心工作正常。嗅探到单个数据包后,我们再次测试 Windows,并在退出脚本之前禁用混杂模式。
我对此的理解是,我应该能够在 nostarch.com 上使用它作为示例 但唯一回到我身边的是:
sniffer.bind((host, 0))
OSError: [Errno 49] Can't assign requested address
除非我自己尝试 我不能在路由器上使用它,或者在我的本地 appleTv 上,或者 smartv 我只有在我 ping 自己时才会得到响应
谁能告诉我我只能用这段代码 ping 自己?这是意料之中的还是我的网卡有什么问题?
// 亚历山大 顺便说一句,如果你看到这个 Justin Seitz 你太棒了!好书!
【问题讨论】:
标签: python-3.x security