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()
    #上面这一部分 快速解析了要扫描的目标主机名字 和 端口
  • 相关阅读:
    HDU 3401 Trade
    POJ 1151 Atlantis
    HDU 3415 Max Sum of MaxKsubsequence
    HDU 4234 Moving Points
    HDU 4258 Covered Walkway
    HDU 4391 Paint The Wall
    HDU 1199 Color the Ball
    HDU 4374 One hundred layer
    HDU 3507 Print Article
    GCC特性之__init修饰解析 kasalyn的专栏 博客频道 CSDN.NET
  • 原文地址:https://www.cnblogs.com/shidi/p/7487368.html
Copyright © 2011-2022 走看看