end的学习 ICMP主机探测

parser.add_option

add_option用来加入选项,action是有store,store_true,store_false等,dest是存储的变量,default是缺省值,help是帮助提示 。最后通过parse_args()函数的解析。

parse_args() 返回的两个值:(options, args) = parser.parse_args()

options,它是一个对象(optpars.Values),保存有命令行参数值。只要知道命令行参数名,如 file,就可以访问其对应的值: options.file 。args,它是一个由 positional arguments 组成的列表。
     parser.add_option("-f", "--file",  
                      action="store", type="string", dest="filename")  
    args = ["-f", "foo.txt"]  
    (options, args) = parser.parse_args(args)  
    print options.filename  
    #最后将会打印出 “foo.txt”。

当 optparse 解析到’-f’,会继续解析后面的’foo.txt’,然后将’foo.txt’保存到 options.filename 里。当调用 parser.args() 后,options.filename 的值就为’foo.txt’。

split() 方法语法:

str.split(str="", num=string.count(str)).

    str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
    num -- 分割次数。默认为 -1, 即分隔所有。

txt = "Google#Runoob#Taobao#Facebook"
 
# 第二个参数为 1,返回两个参数列表
x = txt.split("#", 1)
 
print x
#['Google', 'Runoob#Taobao#Facebook']

ICMP主机探测

from scapy.all import *
from random import randint#产生随机数字段
from optparse import OptionParser#用于生成命令行参数

def main():
    parser = OptionParser("Usage:%prog -i <target host>")#输出帮助信息
    parser.add_option('-i',type='string',dest='IP',help='specify target host')
    options,args=parser.parse_args()
    print("Scan report for"+options.IP+"\n")#获取ip地址参数
    if '-' in options.IP:#ip中存在-说明要扫描多台主机
        for i in range(int(options.IP.split('-')[0].split('.')[3]),int(options.IP.split('-')[1])+1):#循环便利出ip地址
            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")

def Scan(ip):
    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)#sr()”函数是用来发送数据包和接收应答。该函数返回一对数据包及其应答,还有无应答的数据包。“sr1()”函数是一种变体,用来返回一个应答数据包。
    if result:
        for rcv in result:
            scan_ip = rcv[IP].src
            print(scan_ip+'----->' 'host is up')
    else:
            print(ip+'----->' 'host is down')

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print("interrupted by user,killing all threads..")

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值