渗透入门:手把手教你如何做一个端口扫描器

前言

端口扫描可以算是渗透过程中的最最入门的一部分,也可以说是先行军。通常某些常用端口提供的服务存在一些已经被发现的漏洞,比如21端口ftp服务,22端口的ssh服务,以及去年大规模爆发的勒索病毒锁利用的445端口、135端口以及137-139端口,当然更多的漏洞还未被披露出来。

如果需要做渗透,首先得知道目标主机到底提供了哪些服务,然后根据具体服务存在的已知漏洞进行攻击(特别是一些低版本的服务,很多已知漏洞并未被修复)。因此,首先进行端口扫描是很有必要的。当然,目前其实也有不少成熟的端口扫描工具,甚至可以测出是否存在某些漏洞,如弱口令等。但是,自己写出来的比用工具更为有成就感哦。


正式开始

今天的内容我们主要用python来实现,相对来说,python的库更为丰富,很多时候只是为了实现某种目的而不在意运行效率的话,python可以算是较优的选项了,今天主要实现对目标主机的开放端口的检测,python只需要三个函数,短短四十多行就可以完成。

程序首先从main函数开始:

def main():
    parser = optparse.OptionParser("usage%prog -H <target host>")
    parser.add_option("-H", dest="targetHost", type="string", help="specify the host")
    (options, args) = parser.parse_args()
    targetHost = options.targetHost
    if targetHost is None:
        print "illegal args"
        exit(0)
    else:
        scan(targetHost)复制代码

这里实现的其实非常简单,本质是利用optparse库来接收参数并调用scan函数来执行具体的扫描任务。

然后来看看具体scan函数做了什么内容:

def scan(host):
    try:
        targetIp = gethostbyname(host)
    except:
        print 'cannot resolve '+ host
        return
    try:
        targetName = gethostbyaddr(targetIp)
        print 'targetName is '+ targetName[0]
    except:
        print 'scan result for '+ targetIp

    for port in range(1, 65536):
        print "scanning port %d " %port
        scanCore(host, port)复制代码

在scan函数里,我们主要实现了对host的解析,如果发现是无效域名,则不继续执行,如果是有效的,则针对1到65535的端口进行扫描,具体针对某个端口是否开放用的是scanCore进行确认——实际上,这里端口范围可以根据自己的需求来调整。

def scanCore(host, port):
    try:
        sock = socket(AF_INET, SOCK_STREAM)
        sock.settimeout(3)
        sock.connect((host, port))
        print "%d port opened" % port
        sock.close()
    except:
        print "%d port not opened" %port复制代码

在scanCore中,实质是利用socket对该主机的该端口进行连接,如果连接成功则意味着该端口为开放状态;如果超时或者连接失败,则判定为该端口并未开放。

总结

代码非常简单,实现的功能也非常简单,可以说是一个初级版本。实际上,另外还有很多方式可以来对端口进行测试,比如telnet。


转载于:https://juejin.im/post/5be04a6e6fb9a04a060450fd

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值