python安全攻防---信息收集---ICMP主机探测 以及optionparser的使用

0x01 基础概念

ICMP(Internet control Message Protocal)Internet报文协议,是TCP/IP的一种子协议,属于网络层协议,其目的是用于在IP主机、路由器之间传递控制信息

0x02 程序

程序

# -*- coding:utf-8 -*-
from scapy.all import *
from random import randint
from optparse import OptionParserdef Scan(ip):'''Scan函数通过调用ICMP,将构造好的请求包发送到目的地址,并根据目的地址的应答数据判断目标主机是否存活。存活的IP地址打印出“xx.xx.xx.xx--->Host is up",不存活的主机打印出"xx.xx.xx.xx--->Host is down"::param ip::return:'''ip_id = randint(1,65535)icmp_id = randint(1,65535)icmp_seq = randint(1,65535)packet = IP(dst=ip,ttl=64,id=ip_id)/ICMP(id=icmp_id,seq = icmp_seq)/b'rootkit'result = sr1(packet,timeout=1,verbose=False)if result:for rcv in result:scan_ip = rcv[IP].srcprint(scan_ip+'--->''Host is up')else:pass# print(ip+'---> host is down')def main():parser = OptionParser("usage:%prog -i <target host>")#输出帮助信息parser.add_option("-i",type='string',dest='IP',help='specify target host')#获取IP地址参数options,args = parser.parse_args()print("Scan report for"+options.IP+"\n")#判断是单台主机还是多台主机#IP中存在-,说明是要扫描多台主机if '-' in options.IP:#代码举例:192.168.1.1-120#通过'-'进行分割,把192.168.1.1和120分开#把192.168.1.1通过','进行分割,取最后一个数作为range函数的start,然后把120+1作为range函数的stop#这样循环遍历出需要扫描的IP地址for i in range(int(options.IP.split('-')[0].split('.')[3]),int(options.IP.split('-')[1])+1):Scan(options.IP.split('.')[0]+'.'+options.IP.split('.')[1]+'.'+options.IP.split('.')[2]+'.'+str(i))time.sleep(0.2)else:Scan(options.IP)print("\nScan finished!...\n")if __name__ == '__main__':try:main()except KeyboardInterrupt:print("interrupted by user,killing all threads...")

结果:
在这里插入图片描述

0x03 分析

关于optionparser的使用
  1. 创建parser实例
  2. 使用add_option添加我们要处理的命令行参数
  3. 得到解析sys.argv后的options对象,查看用户的输入
  from optparse import OptionParserparser = OptionParser(...)parser.add_option(.....)
  • OptionParser()不要求一定要传递参数
OptionParser(usage="%prog",version="%prog 1.0",description="hello")#%prog 在这里会自动替换为程序名字#usage 可以打印用法#version 在使用%prog --version的时候输出版本信息#description 描述信息
  • add_option添加命令行参数
#action  指示optparser解析参数时候该如何处理。默认是'store',表示将命令行参数值保存options    对象里 。<br>action的值有:store,store_true,store_false,store_const,append,count,callback.
#type 默认是“string",也可以是"int","float"等
#dest 如果没有指定dest参数,将用命令行参数名来对options对象的值进行存取。
#store store可以为store_true和store_false两种形式。用于处理命令行参数后面不带值的情况。如-v,-q等命令行参数。
#default 设置默认值
#help    指定帮助文档
#metavar 提示用户期望参数
  • 最后调用parse_args()解析命令行形参
(options, args) = parser.parse_args()可以传递一个参数列表给parse_args(),否则,默认使用命令行参数(sysargv[1:])。
parse_args()返回两个值:options, 这是一个对象(optpars.Values),保存有命令行参数值。只要知道命令行参数名,如file,就可以访问其对应的值:options.file。args,一个由positional arguments组成的列表。

这里要特别注意options和args,options访问值是options.参数名,args是一个列表
例如:

from optparse import OptionParser
#创建parser实例
parser = OptionParser()
#添加参数
parser.add_option('-s','--server',dest='server',help='server ip_address')
parser.add_option('-P','--port',type='int',dest='port',help='server port')
parser.add_option('-u','--username',dest='username',help='username info')
parser.add_option('-p','--password',dest='password',help='password info')
#获取值
options,args=parser.parse_args()
print(options)
print(args)
#获取特定参数
serv = options.server
user = options.username
print(serv)
print(user)

我们命令行输入:

python test.py -s 192.168.142.145 -P 80 -u name -p 123456 111 22 333

输出结果:
在这里插入图片描述
这里重点看懂:

  • options获取的是哪些值?就是我们dest值以及参数值,比如-p 80,options里的值是'port':80
  • args获取的是哪些值?就是除了参数和参数值以外的,这里是['111', '22', '333'],这个是列表类型
  • 如何获取特定参数值?使用options.dest值
  • 使用OptionParser的三步骤,创建对象—》添加参数----》获取输入值

虽然我们没有添加-h,我们依然可以使用-h获取帮助文档
在这里插入图片描述
这里看明白,main函数基本就能看懂了,对于Scan函数,使用的是scapy模块的一些知识,可以这篇文章:
https://blog.csdn.net/qq_41683305/article/details/117436197
main主要用来获取IP地址的,并将IP地址依次传入Scan函数进行就行判断,是否存在该主机

0x04 参看文章

https://www.cnblogs.com/blacksunny/p/5315545.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379835.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一章 基础知识---1.4Crack小实验--复现

0x01 程序及其编译环境 程序如下&#xff0c;功能&#xff1a;我们必须输入正确的密码1234567才能得到密码验证的确认&#xff0c;跳出循环。否则程序提示密码错误再次输入。 #include <stdio.h>#define PASSWORD "1234567"int verify_password(char* passwo…

.net中调用exchange服务器发邮件

普通的邮件, 用System.Net.Mail 类 或 System.Web.Mail 类 处理即可, 但是Exchange Server 环境下, 这两个类起不了作用-------至少目前我看到的情况如此. 整个过程如下: 1. 先添加COM 引用 "Microsoft CDO for Windows 2000 Library" .2. 发送邮件的代码: CDO.Messa…

端口复用和重映射--STM32F103

什么是端口复用&#xff1f; STM32中有很多内置外设&#xff0c;这些外设的引脚都是与GPIO复用的&#xff0c;什么时候复用呢&#xff1f;就是当一个GPIO作为内置外设引脚使用时&#xff0c;就叫做复用。比如串口1的发送接收引脚是PA9&#xff0c;PA10&#xff0c;当PA9&#…

[转]Ubuntu远程桌面登陆

原文地址&#xff1a;http://www.cnblogs.com/xdzone/archive/2011/03/10/1979644.html 1.xp下默认的远程桌面协议是rdp&#xff0c;默认端口3389&#xff0c;而ubuntu用的时vnc&#xff1a;默认端口5900 2.首先被访问的主机&#xff08;windows/linux&#xff09;都要设置为允…

NVIC中断管理---STM32

NVIC&#xff1a;嵌套向量中断控制器 在了解中断之前&#xff0c;我们先了解抢占优先级和响应优先级 抢占优先级和响应优先级 抢占优先级决定能不能打断&#xff0c;高优先级的抢占可以中断低优先级的抢占响应优先级在抢占优先级相同时&#xff0c;高响应优先级先执行&#x…

外部中断---STM32F1

外部中断概述 STM32的中断控制器支持19个外部中断/事件请求&#xff1a; 线0-15&#xff1a;对应外部IO口的输入中断线16&#xff1a;连接到PVD输出线17&#xff1a;连接到RTC闹钟事件线18&#xff1a;连接到USB唤醒事件 STM32每个IO口都有可以作为外部中断输入&#xff0c;…

转:点9图

关于”点九” 转&#xff1a;http://mux.baidu.com/?p1506“点九”是andriod平台的应用软件开发里的一种特殊的图片形式&#xff0c;文件扩展名为&#xff1a;.9.png 智能手机中有自动横屏的功能,同一幅界面会在随着手机(或平板电脑)中的方向传感器的参数不同而改变显示的方向…

串口通信的基本原理----STM32

串口通信基本原理 1. 处理器与外部设置通信的基本方式 并行通信&#xff1a;数据各个位同时传输串行通信&#xff1a;数据按位顺序传输 在串行通信中&#xff0c;按照数据的传输方向&#xff0c;又分为&#xff1a; 单工&#xff1a;数据传输只支持在一个方向传输半双工&am…

Spring MVC+Ant+Tomcat+Eclipse最简单的demo

第一步是Java的Web环境搭建&#xff0c;下载Eclipse&#xff08;或者更好的但收费的IDE-IntelliJ Idea&#xff0c;和Resharper一家公司出的&#xff09;&#xff0c;下载Tomcat&#xff0c;下载JDK&#xff0c;下载Spring&#xff0c;注意安装Tomcat的时候配置一下管理员账号和…

MySQL的环境变量配置详细步骤

1.下载MySQL 例如下载&#xff1a;mysql-installer-community-5.5.60.1 我以这个版本为例 2.右击->我的电脑->属性 3. 4.找到在 系统变量 中找到 Path 5.找MySql的bin目录&#xff08;每个人的电脑上这个文件的位置应该是差不多的&#xff0c;找到之后复制下来&#x…

串口发送通信---UART发送---STM32F4实现

串口发送程序配置过程&#xff08;HAL库&#xff09; 初始化串口相关参数&#xff0c;使能串口 HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)该函数的参数是串口的基址&#xff0c;在stm32f429xx.h文件中&#xff0c;定义了8个UART_HandleTypeDef的值&#x…

开源软件 许可证密钥_自由和开源软件-1中的重要许可证

开源软件 许可证密钥Its important to take note that there are no good or bad licenses and that no license is superior to another. Anybody can make an open-source license that suits their extravagant, which is the explanation that there are such huge numbers…

串口接收中断配置过程---STM32F4--HAL

串口接收中断程序配置过程&#xff08;HAL&#xff09; 初始化相关参数&#xff0c;使能串口&#xff1a; HAL_UART_Init();该函数的参数是串口的基址&#xff0c;在stm32f429xx.h文件中&#xff0c;定义了8个UART_HandleTypeDef的值&#xff0c;分别是USART1、USART2、USART…

定时器--STM32f4--HAL

基本概念 STM32中有三种定时器&#xff0c;高级定时器&#xff0c;通用定时器&#xff0c;基本定时器&#xff0c;具体如下图&#xff1a; 发生如下事件将产生中断/DMA 更新&#xff1a;计数器向上溢出/向下溢出&#xff0c;计数器初始化触发事件&#xff1a;计数器启动、停…

独立看门狗---STM32----HAL

基本概念 看门狗解决的问题是什么&#xff1f; 在系统跑飞&#xff08;程序异常执行&#xff09;的情况&#xff0c;是系统复位&#xff0c;程序重新执行。 独立看门狗适应用于需要看门狗作为一个在主程序之外能够完全独立工作&#xff0c;并且对时间精度要求低的场合。 工…

IIC通信---EEPROM24C02---STMF4

IIC通信协议 IIC是同步半双工通信&#xff0c;一个数据线SDA和一个时钟SCL线&#xff0c;可以接受和发送数据。在CPU与被控IC之间、IC与IC之间进行双向传送。 空闲状态 IIC总线的SDA和SCL两条信号线同时处于高电平时&#xff0c;规定为总线的空闲状态。 起始信号 当SCL为高…

JavaScript | 使用提示从用户输入值

Example 1) Input name and print 示例1)输入名称和打印 Code (JS & HTML): 代码(JS和HTML)&#xff1a; <!DOCTYPE html><HTML><HEAD><SCRIPT>var name prompt("Enter Your name:");var msg "Welcome "name;//alert(msg)…

项目管理中工作分解结构模型(WBSM)的应用

摘要 本文根据工作分解结构(WBS)的工作特点&#xff0c;运用系统工程的思想理论方法&#xff0c;构建了工作分解结构模型&#xff0c;并提出了模型算法;该模型方法的建立使得WBS工作更加简单可靠、思路清晰、基于更加可靠的科学基础之上。 1、工作分解结构模型(WBSM)方法工作程…

SPI通信原理---STM32F4--HAL

SPI接口原理 SPI是一种高速全双工同步通信&#xff0c;在芯片管脚上占用四根线&#xff0c;主要应用在EEPROM、FLASH、实时时钟、AD转换器&#xff0c;还有数字信号处理器和数字信号解码器之间。 SPI接口使用4根线通信。 MISO&#xff1a;主设备数据输入&#xff0c;从设备数…

pata1015_ATA / PATA的完整形式是什么?

pata1015ATA / PATA&#xff1a;高级技术附件/并行高级技术附件 (ATA/PATA: Advanced Technology Attachment/Parallel Advanced Technology Attachment) ATA is an abbreviation of Advanced Technology Attachment. ATA has existed for a long time with the name PATA. Whe…