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)
Scapy 网段中ping扫描的更多相关文章
- 在 .NET 中,扫描局域网服务的实现
在最近负责的项目中,需要实现这样一个需求:在客户端程序中,扫描当前机器所在网段中的所有机器上是否有某服务启动,并把所有已经启动服务的机器列出来,供用户选择,连接哪个服务.注意:这里所说的服务事实上就是 ...
- SQL Server 执行计划中的扫描方式举例说明
SQL Server 执行计划中的扫描方式举例说明 原文地址:http://www.cnblogs.com/zihunqingxin/p/3201155.html 1.执行计划使用方式 选中需要执行的 ...
- [置顶] 如何判断两个IP大小关系及是否在同一个网段中
功能点 判断某个IP地址是否合法 判断两个IP地址是否在同一个网段中 判断两个IP地址的大小关系 知识准备 IP协议 子网掩码 Java 正则表达式 基本原理 IP地址范围 0.0.0.0- 255 ...
- linux中ping带时间及打印内容到文件
ping命令就不多说了,-i是时间间隔,-c是ping的次数 这种是每隔30秒ping一次,并在后面显示时间: ping 192.168.30.123 -i 30 | awk '{ print $0& ...
- Linux中ping不通外网
在linux中ping www.baidu.com 无法ping通 需要修改vi /etc/resolv.conf 增加如下内容: nameserver 114.114.114.114 nameser ...
- linux 中 ping的回传值
今天在学习鸟哥私房菜的过程中,不明白ping的回传值是怎么设置的,后来网上找的结果了,特此记录一下 1 题目大意是指,ping一个网段的机器,如果可以通,就显示UP,如果不通就显示Down,其中一 ...
- python多线程与多进程--存活主机ping扫描以及爬取股票价格
python多线程与多进程 多线程: 案例:扫描给定网络中存活的主机(通过ping来测试,有响应则说明主机存活) 普通版本: #扫描给定网络中存活的主机(通过ping来测试,有响应则说明主机存活)im ...
- 网络中 ping 不通 路由表
不管是在window还是在linux中,我们经常会遇到ping不通的问题. 这里的原因很多,比如不同的网段交换机做了一些限制等,这些问题是我们人工不能解决的. 但是,当你发现各自的网关是可以ping的 ...
- 【转】C#中判断扫描枪输入与键盘输入
提出问题:在收货系统中,常常要用到扫描枪扫描条码输入到TextBox,当条码无法扫描时,需要手工输入.如果是扫描枪输入时,我们将自动去判读条码,而手工输入时,最终需要加按回车键确认后判读条码.这时候我 ...
随机推荐
- jquery 中的dom操作
jquery DOM 分为元素操作.属性操作.样式操作. 一.元素操作 1.查找 ①工具:jQuery选择器 2.创建和添加 ①代码格式:变量 = $('要创建的元素'): 注意点: 1 要使用标准的 ...
- office2010安装需MSXML版本6.10.1129.0详解解
https://blog.csdn.net/qq_40824474/article/details/82390606 office2010安装提示报错 由于下列原因,安装程序无法继续,需要计算机安装M ...
- 转载: 国内的go get无法连接问题的解决
转载自CSDN的文章 https://blog.csdn.net/gongpulin/article/details/80972806 国内的go get问题的解决 go get golang.org ...
- HBase数据结构(读书笔记 )
背景: 最近在做一些跟大数据相关的东西,涉及到数据的存储和分析,考虑各个方面,选择使用HBase进行存储,使用原生Java API进行数据分析,之后会陆续写一系列来说明最近做的东西,给像我这样未曾涉及 ...
- LOJ #6089. 小 Y 的背包计数问题
LOJ #6089. 小 Y 的背包计数问题 神仙题啊orz. 首先把数分成\(<=\sqrt n\)的和\(>\sqrt n\)的两部分. \(>\sqrt n\)的部分因为最多选 ...
- cogs1538 [AHOI2005]LANE 航线规划
套路题+裸题 首先肯定离线,倒过来处理,删边->加边 连边的时候,如果不连通就连,否则在这两个点的链上打个覆盖标记,查询的时候输出没被覆盖的路径条数 #include<cstdio> ...
- Python之时间模块、random模块、json与pickle模块
一.时间模块 1.常用时间模块 import time # 时间分为三种格式 #1.时间戳---------------------以秒计算 # start= time.time() # time.s ...
- 使用JDBC连接MySQL数据库
Java数据库连接(Java DataBase connectivity简称JDBC) 下载JDBC驱动:https://dev.mysql.com/downloads/connector/j/ Wi ...
- eclipse生成ant build.xml打war包
背景: 最近想实现jenkins+ant命令一键打war包,部署到测试环境,然后自动化接口测试,结果发现用eclipse本身导出的ant buildfiles文件,打包出来都是空文件.很多代码都没 ...
- Mysql试题集锦
1.一张表,里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 Mysql 重启,再 insert 一条记录,这条记录的 ID 是 18 还是 1 ...