Python scapy ping多进程调用

发送模块

import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR) #防止scapy模块出现错误而生成的日志
from scapy.all import * #导入scapy模块
from  random import randint #随机模块random 调用randint随机整数方法
import  sys,os

def  ping_one(host):
    id_ip = randint(1, 65535)  # 随机产生IP ID位
    id_ping = randint(1, 65535)  # 随机产生ping ID位
    seq_ping = randint(1, 65535)  # 随机产生ping序列号位
    packet = IP(dst=host, ttl=1, id=id_ip) / ICMP(id=id_ping, seq=seq_ping) / b'whl'  # 构造一个数据包
    ping = sr1(packet, timeout=0.2, verbose=False)  # 使用ping 发送数据包,timeout超过2秒 关闭详细信息
    if ping!=0:  # 如果ping有响应信息
        os._exit(3)  # 退出码


if __name__ == '__main__':
    ping_one(sys.argv[1])

多进程调用

import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR) #防止scapy模块出现错误而生成的日志
import ipaddress  #整理IP
import time #时间模块
import multiprocessing #使用多进程模块
from  ping_one import ping_one #导入执行发包模块
from scapy.all import *
import sys,os
def scany_ping_scan(network):
    net =ipaddress.ip_network(network) #分析数据中的IP地址
    ip_processes={}#进程字典
    for ip in net:#迭代提取net中的数据给 ip
        ip_addr=str(ip)#把每一个读取多IP转换成字符串
        scan_prin_one=multiprocessing.Process(target=ping_one,args=(ip_addr,))#开启多进程 target使用这个函数 并用args把ip_addr中的数据添加进去
        scan_prin_one.start()#开启这个进程
        ip_processes[ip_addr]=scan_prin_one#把这些进程放进这个字典中
    ip_list=[]#设置一个成功列表
    for ip,process in ip_processes.items():
        if process.exitcode ==3:#退出码为3表示ping成功
            ip_list.append(ip)#把存活多IP地址追加到ip_list列表中
        else:
            process.terminate()
    return  sorted(ip_list)
if __name__=='__main__':
    import time
    t1=time.time()
    activ_ip=scany_ping_scan(sys.argv[1])
    print('存活的IP地址如下:')
    for ip in activ_ip:
        print(ip)
    t2=time.time()
    print(t2-t1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值