端口扫描可以算是渗透过程中的最最入门的一部分,也可以说是先行军。通常某些常用端口提供的服务存在少量已经被发现的漏洞,比方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。
欢迎小伙伴与我探讨哦~
邮箱:zsunny@yeah.net
本文欢迎转载,请注明本文地址:https://www.songma.com/p/417e9bfcbb59