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,当条码无法扫描时,需要手工输入.如果是扫描枪输入时,我们将自动去判读条码,而手工输入时,最终需要加按回车键确认后判读条码.这时候我 ...
随机推荐
- ubuntu 9.10 切换到root用户
昨天装了ubuntu9.10,登陆后是普通用户,操作不方便,上网上查了资料,有很多方法,我发现最简单的方法 有些资料说,ubuntu每次重启root密码是随机的(当你没有设置密码时), 打开终端: $ ...
- CTF-安恒18年十一月月赛部分writeup
安恒十一月月赛writeup 昨天做了一下十一月的题目,不才只做出来几道 签到web1 这个是十月的原题,因为忘了截图所以只能提供思路 Web消息头包含了登陆框的密码 输入密码后进入上传页面,上传一句 ...
- Noip前的大抱佛脚----动态规划
目录 动态规划 序列DP 背包问题 状态压缩以及拆分数 期望概率DP 马尔可夫过程 一类生成树计数问题 平方计数 动态规划 序列DP 有些问题: 求长度为\(l\)的上升子序列个数 形如一个值域的前缀 ...
- mfc 私有成员
知识点 类的私有成员private 访问类的私有成员 内联函数inline 一.类的私有成员 用private定义的(变量)或者(函数)只能在本类中使用其他类不能中不能调用: 用public定义的(变 ...
- c++ 指针访问数组
用指针访问一维数组 用指针访问二维数组 用指针访问三维数组 一. 用指针访问一维数组 //代码 ; ]={,}; int *p=&a; //int *p=&a[0]; printf(& ...
- 【转载】COM 组件设计与应用(七)——编译、注册、调用
原文:http://vckbase.com/index.php/wv/1218.html 一.前言 上两回中,咱们用 ATL 写了第一个 COM 组件程序,这回中,主要介绍编译.册和调用方法.示例程序 ...
- 4513: [Sdoi2016]储能表
4513: [Sdoi2016]储能表 链接 分析: 数位dp. 横坐标和纵坐标一起数位dp,分别记录当前横纵坐标中这一位是否受n或m的限制,在记录一维表示当前是否已经大于k了. 然后需要两个数组记录 ...
- POJ-2299 Ultra-QuickSort (树状数组)
题目链接:Ultra-QuickSort 题意: 给出了一个序列,序列中有n个数,现在每次操作能交换相邻的两个数,要求操作几次可以将这个序列转换为一个从小到大排序的序列. 题解: 我的解法是先把所有的 ...
- jquery 直接访问图片路径
jQuery("#img").attr("src",function(){return this.src+"?"});
- CI/CD系列
一.CI/CD系列 什么是CI/CD(译) Docker与CI/CD(转) Docker和CI/CD实战 二.Git 三.GitLab