1-编写一个端口扫描器

源代码:https://github.com/LToddy/penetrationtest

任何一个靠谱的网络攻击都是起步于侦察的。
攻击者必须在挑选并确定利用目标中的漏洞之前找到目标在哪里有漏洞。
编写一个扫描目标主机开放的TCP端口的侦察小脚本。
为了与TCP端口进行交互,我们要先建立TCP套接字。

Python提供了BSD套接字的接口。
BSD套接字提供了一个应用编程接口,使程序员能编写在主机之间进行网络通信的应用程序。
通过一系列套接字API函数,我们可以创建、绑定监听、连接,或在TCP/IP套接字上发送数据。

大多数能访问互联网的应用使用的都是TCP协议。
例如,在目标组织中,Web服务器可能位于TCP80端口,电子邮件服务器在TCP25端口,FTP服务器在TCP21端口。
要连接目标组织中的任一服务器,攻击者必须知道与服务器相关联的IP地址和TCP端口。

所有成功的网络攻击一般都是从端口扫描来开序幕的。
有一种类型的端口扫描会向一系列常用的端口发送TCP SYN数据包,并等待TCP ACK响应——这能让我们确定这个端口是开放的。
与此相反,TCP连接扫描是使用完整的三次握手来确定服务器或端口是否可用的。

TCP全连接扫描

开始编写自己用的TCP全连接扫描来识别主机的TCP端口扫描器。
要导入Python的BSD套接字API实现。
套接字API会为我们提供一些在实现TCP端口扫描程序时有用的函数。
要深入的了解请查看文档.

为了更好的了解TCP端口扫描器的工作原理,我们将脚本分成五个独立的步骤,分别为它们编写Python代码。
首先输入一个主机名和用逗号分割的端口列表,并予以扫描。
接下来将主机转换成IPv4互联网地址。对列表中的每个端口,我们都会链接目标地址和该端口。
最后,为了确定在该端口上运行什么服务,我们将发送垃圾数据并读取由具体应用发回的Banner。

在第一步中,从用户那里获得主机名和端口。
为了做到这一点,我们在程序中使用optparse库解析命令行参数。
调用optparse.OptionParser([usage message])会生成一个参数解析器(option parser)类的实例。
接着,在parser.add_option中指定这个脚本具体要解析哪个命令行参数。

e.g. 一个快速解析要扫描的目标主机名和端口的方法

import optparse

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='string', help='specify target port')

(options, args) = parser.parse_args()
tgtHost = options.tgtHost
tgtPort = options.tgtPort
if tgtHost == None or tgtPort == None:
    print(parser.usage)
    exit(0)
else:
    print(tgtHost)
    print(tgtPort)

接下来我么要生成俩个个函数: connScan和portScan.
portScan函数以参数的形式接受主机名和目标端口列表。
它首先会尝试用gethostbyname()函数确定主机名对应的IP地址。
接下来,它会使用connScan函数输出主机名字(或IP地址),并使用connScan()函数尝试逐个连接我们要连接的每个端口。
connScan函数接受两个参数:tgtHost和tgtPort,它会去尝试建立与目标主机端口的连接。
如果成功,connScan将打印出一个端口开放的消息。如果不成功,它会打印出端口关闭的消息。

from socket import *


def connScan(tgtHost, tgtPort):
    try:
        connSkt = socket(AF_INET, SOCK_STREAM)
        connSkt.connect((tgtHost, tgtPort))
        print('[+] %d/tcp open' % tgtPort)
        connSkt.close()
    except Exception:
        print('
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值