zoukankan      html  css  js  c++  java
  • 网络攻防学习 1编写一个端口扫描器

    谨以此文献给初学的自己!

    我有太多的名词不认识通过学习 一步步巩固基础 一步步提高自己r

    任何一个靠谱的网络攻击都是起步于侦查的。我们将学习编写一个扫描主机开放的tcp端口的侦察小脚本,为了与tcp端交互,我们先建立TCP套接字。

    套接字:

    英文名字为socket, 是支持TCP/IP网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。

    书写一个初级的端口扫描器,从而学习了optparse的用法,optparse可用来解析命令行参数 来传递指令来实现交互

    import optparse
    from optparse import OptionParser
    import socket
    from socket import *
    #去测试目标主机的那个端口是开放的,并且开放的端口的活动应用是什么
    def connScan(tgtHost,tgtPort):
        try:
            connSkt=socket.socket(AF_INET,SOCK_STREAM)
            connSkt.connect((tgtHost,tgtPort))
            #我们需要发送一个消息去获得一个响应,从而根据这个响应 我们来判断对应的目标主机和端口上的应用
            connSkt.send("ViolentPython
    ")
            results=connSkt.recv(1024)
            #标明端口开放
            print ("[+]%d/tcp open")% tgtPort
            #输出返回的结果
            print ("[+]"+str(results))
            connSkt.close()
        except:
            print ("[-]%d/tcp closed"% tgtPort)
    def portScan(tgtHost,tgtPorts):
        #其实我我觉得这两个try就是为了测试tgtHost的准确性
        try:
            #传入一个主机名字会返回其对应得IP地址
            tgtIP=gethostbyname(tgtHost)
        except:
            print ("[-] cannot resolve '%s': unkown host"%tgtHost)
            return
        try:
            #根据IP能返回其对应的主机名字
            tgtName=gethostbyaddr(tgtIP)
            #返回扫描的结果
            print ("
    [+] Scan Results for:" +tgtName[0])
        except:
            print ("
    [+] Scan Results for :"+tgtIP)
        #设置全局的socket超出时间1秒
        setdefaulttimeout(1)
        for tgtPort in tgtPorts:
            print ("Scanning Port%s "%tgtPort)
            connScan(tgtHost,int(tgtPort))
    
    def main():
    #生成一个参数解释器的实例
        parser=optparse.OptionParser("usage %prog "+"-H <target host> -p <target port>")
        #指定解析参数
        parser.add_option("-H",dest="tgtHost",type="string",help="specify target host")
        parser.add_option("-p",dest="tgtPort",type="int",help="specify target port[s] separeted by comma")
        #parse_args 来用来解析这些参数
        (options,args)=parser.parse_args()
    
        tgtHost=options.tgtHost
        #端口不止一个 所以我们用split分隔 共同存储在一个列表中
        tgtPorts=str(options.tgtPort).split(",")
        if (tgtHost==None) | (tgtPorts[0]==None):
            print ("[-]you must specify a target host and port[s].")
            exit(0)
        portScan(tgtHost,tgtPorts)
    if __name__=="__main__":
        main()
    #上面这一部分 快速解析了要扫描的目标主机名字 和 端口
  • 相关阅读:
    关于《大道至简-软件工程实践者的思想》的读书笔记(二)
    关于《大道至简-软件工程实践者的思想》的读书笔记(一)
    Android源码项目目录结构
    Android源码目录结构详解
    项目阶段总结
    站立会议07(二期)
    站立会议06(二期)
    站立会议05(二期)
    站立会议04(二期)
    站立会议03(二期)
  • 原文地址:https://www.cnblogs.com/shidi/p/7487368.html
Copyright © 2011-2022 走看看