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)

原文地址:https://www.cnblogs.com/maskerk/p/10000547.html

时间: 2024-11-09 06:42:32

Scapy 网段中ping扫描的相关文章

Ossim 中漏洞扫描详解

Ossim 中漏洞扫描详解 Openvas是一套开源漏洞扫描系统,如果手动搭建需要复杂的过程,花费不少人力和时间成本,此文主要针对OSSIM平台下如何以图形化方式操作漏洞扫描的过程. 准备工作:首先确保没有运行的扫描进程和任务 扫描漏洞同时升级漏洞库会导致升级失败. 第一步:同步插件 #openvas-nvt-sync 同步数万个插件时间比较长,可以去喝杯咖啡啦,或者了解一下插件的组成. 表1 Openvas主要脚本分类及分布情况 规则名称 数量 备注 IIS_frontpage_DOS_2.n

在 .NET 中,扫描局域网服务的实现

在最近负责的项目中,需要实现这样一个需求:在客户端程序中,扫描当前机器所在网段中的所有机器上是否有某服务启动,并把所有已经启动服务的机器列出来,供用户选择,连接哪个服务.注意:这里所说的服务事实上就是在一个固定的端口监听基于 TCP 协议的请求的程序或者服务(如 WCF 服务). 要实现这样的功能,核心的一点就是在得到当前机器同网段的所有机器的 IP 后,对每一 IP 发生 TCP 连接请求,如果请求超时或者出现其它异常,则认为没有服务,反之,如果能够正常连接,则认为服务正常. 经过基本功能的实

不同网段互PING,对不?

不同网段互PING,对不?,布布扣,bubuko.com

WinForm中TextBox 中判断扫描枪输入与键盘输入

本文转载:http://www.cnblogs.com/Hdsome/archive/2011/10/28/2227712.html 提出问题:在收货系统中,常常要用到扫描枪扫描条码输入到TextBox,当条码无法扫描时,需要手工输入.如果是扫描枪输入时,我们将自动去判读条码,而手工输入时,最终需要加按回车键确认后判读条码.这时候我们就要判断输入设备是手工还是扫描枪. 尝试的方法: 1.将TextBox属性设为ReadOnly=true.结果:无法输入. 2.在TextBox的KeyPress事

linux中ping带时间及打印内容到文件

ping命令就不多说了,-i是时间间隔,-c是ping的次数 这种是每隔30秒ping一次,并在后面显示时间: ping 192.168.30.123 -i 30 | awk '{ print $0"\t" strftime("%H:%M:%S",systime()) } ' 这种是把上面ping记录到文件中 ping 192.168.30.123 -i 30 | awk '{ print $0"\t" strftime("%H:%M:

web中使用扫描枪

扫描枪实际上就是一输入设备,只不过它每次在输入的内容后面添加一个回车.因此在web中可以使用js监听回车事件.处理代码如下: jQuery(function() {        jQuery(document).on('keydown','.card_number', function(e){ e = e||event;        var keyCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;         if

SQL Server 执行计划中的扫描方式举例说明

原文地址:http://www.cnblogs.com/zihunqingxin/p/3201155.html 1.执行计划使用方式 选中需要执行的语句,点击Ctrl+L执行 2.示例student表,id,name,addressid上建立聚集索引Name建索引address无索引 3.区别1. [Table Scan]:遍历整个表,查找所有匹配的记录行.这个操作将会一行一行的检查,当然,效率也是最差的.以无索引字段为条件,按存放顺序一个个查,where address='123' 2. [I

Linux中ping不通外网

在linux中ping www.baidu.com 无法ping通,可能原因是DNS没配置好 方法一:修改vi /etc/resolv.conf 增加如下内容: nameserver 114.114.114.114 (电信的DNS) nameserver 8.8.8.8(googel的DNS) 就可以实现ping通外网了 方法二: ip a 或者 ifconfig 查看使用的网卡然后进入/etc/sysconfig/network-scripts找到对应的网卡进行修改 vi /etc/sysco

解决Springboot项目中jpa扫描不到实体的问题

在一些情况下Springboot项目中jpa扫描不到实体.比如默认扫描不到引用的其他项目中定义的实体.导致无法自动创建表. 解决方法,在Application中自定义实体扫描的包 @EntityScan(basePackages = {"com.aaa"}) @SpringBootApplication @EnableDiscoveryClient @ComponentScan(basePackages = {"com.aaa.*"}) @EntityScan(ba