网络攻防学习 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()
#上面这一部分 快速解析了要扫描的目标主机名字 和 端口
原文地址:https://www.cnblogs.com/shidi/p/7487368.html