这俩天累的要死,平时被各科吊打,大周末也不能休息, 先做这个简单的试试,做网络基础的作业,要改网卡为混杂模式
import socket
import os
# 监听的主机
host = "localhost"
# 创建原始套接字,然后绑定在公开接口上
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)
# 在 windows 平台上,我们需要设置 IOCTL 以启用混杂模式
if os.name == "nt":
sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
# 读取单个数据包
recv = sniffer.recvfrom(65535)
print(1234)
print(len(recv), recv)
if os.name == "nt":
sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
在套件字创建那一行,报了这个错:
OSError: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。
查了一下,需要以管理员程序运行
参考了这个大哥的:
import ctypes, sys
def is_admin():
try:
return ctypes.windll.shell32.IsUserAnAdmin()
except:
return False
if is_admin():
# Code of your program here
else:
# Re-run the program with admin rights
ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
只是运行的时候,跳出了一个小黑框,看不到输出,很烦
-
用以管理员权限打开的 powershell , 他这个没法激活我的那个 conda 环境,我又懒得把 Python 路径的环境变量改成那个环境的
-
于是,想找个管理员权限的cmd,这样试了一下,诶,竟然可以:
诶,这次可以运行了
那我在这里打开spyder,是不是也有管理员权限了???
诶,是的确实有管理员权限了,NICE
备注:
我的spyder是这样安装的:
pip install spyder
然后在那个环境输入:
spyder
就可以运行了