zoukankan      html  css  js  c++  java
  • Scapy 网段中ping扫描

    安装scapy

    pip3 install scapy-python3
    

    交互式ip包构造

    #scapy
    >>> ping = sr(IP(dst='202.100.1.1')/ICMP()/b'welcome to qytang')
    
    >>> b = IP(dst='202.100.1.1')/ICMP()/b'welcome to qytang'
    
    >>> b.show()
    
    >>> ping = sr1(b)     #send and receive  1个包
    
    >>> ping.show()
    
    >>> ping.getlayer(ICMP).fields    #提取ICMP的头部,并把头部字段提取出来产生一个字典
    
    >>> ping.getlayer(ICMP).fields['id']    #提取id字段
    
    
    #sr()	发送三层数据包,等待接收一个或者多个数据包的响应
    #sr(1)	发送三层数据包,并仅仅只等待接收一个数据包的相应
    #srp()	发送二层数据包,并且等待响应
    #send()	发送三层数据包,系统会自动处理路由和二层信息
    #sendp()	发送二层数据包
    

    Scapy实现ping扫描

    scapy_ping_one.py 实现一个ip地址的ping

    import logging
    logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
    from scapy.all import *
    from random import randint
    
    def scapy_ping_one(host):
    	id_ip = randint(1,65535)#随机产生IP_ID位
    	id_ping = randint(1,65535)#随机产生Ping_ID位
    	seq_ping = randint(1,65535)#随机产生Ping序列号位
    	#构造Ping数据包
    	packet = IP(dst = host,ttl = 64,id = id_ip)/ICMP(id = id_ping,seq = seq_ping)/b'Welcome to qytang'
    	ping = sr1(packet,timeout = 2,verbose = False)#获取相应信息,超时为2秒,关闭详细信息
    	#ping.show() #被调用来扫描整个网段时候最好注释起来,不然产生大量信息
    	if ping:#如果又响应信息
    		os._exit(3)#退出码为3
    
    if __name__ == '__main__':
    	scapy_ping_one('172.17.168.1')
    
    

    scapy_ping_scan.py 实现整个网段的ping扫描

    import logging
    logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
    import ipaddress
    import time
    import multiprocessing
    from scapy_ping_one import scapy_ping_one
    from scapy.all import *
    def scapy_ping_scan(network):
    	net = ipaddress.ip_network(network)
    	ip_processes = {}
    	for ip in net:
    		ip_addr = str(ip)#读取网络中的每一个IP地址,注意需要str转换为字符串!
    		ping_one = multiprocessing.Process(target = scapy_ping_one,args=(ip_addr))
    		ping_one.start()
    		ip_processes[ip_addr] = ping_one#产生IP与进程对应的字典
    	ip_list = []
    	for ip,process in ip_processes.items():
    		if process.exitcode == 3:
    			ip_list.append(ip)
    		else:
    			process.terminate()
    	return sorted(ip_list)
    
    if __name__ == '__main__':
    	import time
    	t = time.time()
    	active_ip = scapy_ping_scan(sys.argv[1])
    	print('活动IP地址如下:')
    	for ip in active_ip:
    		print(ip)
    	t2 = time.time()
    	print(t2 - t1)
    
  • 相关阅读:
    列表的常用的方法(内建函数)
    关于集合
    scribe、chukwa、kafka、flume日志系统对比
    iptables,lokkit,ebtables,arptables---logrotate
    MTA---smtp(25,postfix,sendmail),Pop3(110,Devocot), MUA(foxmail) IMAP(server,client rsync)
    DNS named. bind linux (ACL/View)---dnsmasq-with docker,hosts in docker.
    javascript closure
    Typed Arrays in javascripts
    OpenPGP协议的一个JavaScript实现:OpenPGP.js
    公有云安全工具
  • 原文地址:https://www.cnblogs.com/maskerk/p/10000547.html
Copyright © 2011-2022 走看看