用python3发送伪造arp探针应答包:修订间差异
来自三线的随记
(创建页面,内容为“部分网络环境下交换机无法对src address 为0.0.0.0 的arp 报文(即ARP探针)做出应答 在这种情况下于另一个节点上执行脚本发送伪…”) |
小无编辑摘要 |
||
第47行: | 第47行: | ||
target_mac = getmacbyip(args[0]) | target_mac = getmacbyip(args[0]) | ||
print("arp probe response to {} {}".format("0.0.0.0", target_mac)) | print("arp probe response to {} {}".format("0.0.0.0", target_mac)) | ||
if target_mac is None: | |||
print("[-] Error: Could not resolve targets MAC address") | |||
sys.exit(1) | |||
#响应包 | #响应包 | ||
def build_rep(): | def build_rep(): | ||
pkt = Ether(src=gw_mac, dst=target_mac) / ARP(hwsrc=gw_mac, psrc=options.gatewayip, hwdst=target_mac, pdst="0.0.0.0", op=2) | pkt = Ether(src=gw_mac, dst=target_mac) / ARP(hwsrc=gw_mac, psrc=options.gatewayip, hwdst=target_mac, pdst="0.0.0.0", op=2) | ||
return pkt | return pkt | ||
第70行: | 第70行: | ||
if __name__ == '__main__': | if __name__ == '__main__': | ||
main() | main() | ||
[[分类:Linux]] | [[分类:Linux]] | ||
[[分类:Python3]] | [[分类:Python3]] | ||
{{DEFAULTSORT:arp}} | {{DEFAULTSORT:arp}} |
2020年7月24日 (五) 16:27的版本
部分网络环境下交换机无法对src address 为0.0.0.0 的arp 报文(即ARP探针)做出应答
在这种情况下于另一个节点上执行脚本发送伪造arp response即可曲线救国
# !/usr/bin/python # -*- coding: UTF-8 -*- import os import sys import signal from scapy.all import ( get_if_hwaddr, # 获取本机网络接口的函数 getmacbyip, # 通过IP地址获取其Mac地址的函数 ARP, # 构造ARP数据包 Ether, # 构造以太网数据包 sendp # 在第二层发送数据包 ) from optparse import OptionParser #格式化用户输入的参数 def main(): #自定义程序使用方法,当中的 %prog,optparse会以当前程序名的字符串来替代 usage = 'Usage: %prog [-i interface] [--gateway gateway_ip] target' #创建一个 OptionParser 对象 parser = OptionParser(usage) #add_option 来定义命令行参数 parser.add_option('-i', dest='interface', help='Specify the interface to use') parser.add_option('--gateway',dest="gatewayip",help="gateway ip address") #调用optionparser的解析函数 (options, args) = parser.parse_args() if len(args) != 1 or options.interface is None or options.gatewayip is None: parser.print_help() print("debug args:",len(args)) print("debug ",options.interface) print("debug ",options.gatewayip) sys.exit(1) # For dce # get gateway mac address gw_mac = getmacbyip(options.gatewayip) print("gateway ip address is:{}, mac address is: {}".format(options.gatewayip, gw_mac)) target_mac = getmacbyip(args[0]) print("arp probe response to {} {}".format("0.0.0.0", target_mac)) if target_mac is None: print("[-] Error: Could not resolve targets MAC address") sys.exit(1) #响应包 def build_rep(): pkt = Ether(src=gw_mac, dst=target_mac) / ARP(hwsrc=gw_mac, psrc=options.gatewayip, hwdst=target_mac, pdst="0.0.0.0", op=2) return pkt pkt = build_rep() def quit(signum, frame): print('\nYou choose to stop me.') exit() signal.signal(signal.SIGINT, quit) while True: #在两次发送数据包之间有一定的时间间隔,使用inter选项,表示每隔2秒发送一个数据包 sendp(pkt, inter=0.5, iface=options.interface) print("arp response sent to {} {}".format("0.0.0.0", target_mac)) if __name__ == '__main__': main()