本文主要是介绍Python Security 之 端口扫描,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这一章将会演示如何通过Python的网络连接来开发一个基础的端口扫描器
我们的设计思路是使用socket一遍又一遍的去连接ip与端口的组合的新值
下面的代码就演示了如何使用内建的socket模块去建立一个socket连接
import sockets = socket.socket()
s.connect(('127.0.0.1s', 22))
s.send('Primal Security \n')banner = s.recv(1024)
print banner
上面这个例子:我们先import这socket模块并且调用connect()函数去连接指定的IP地址与端口。它就会建立一个TCP连接(SYN/SYN-ACK/ACK)并且我们再通过send()函数给服务器发送一个真实的数据,然后使用recv()打印出响应的内容
现在教大家如何容错socket,对于不能打开的连接:
s.connect(('127.0.0.1', 23))
这句话会出错的!
对于上面的错误有若干中处理方式,这里我们使用最简单的一种方式:使用”try/except”循环来处理错误
import sockets = socket.socket()for port in range(20,25):try:print "[+] Attempting to connect to 127.0.0.1:"+str(port)s.connect(('127.0.0.1', port))s.send('Primal Security \n') banner = s.recv(1024)if banner:print "[+] Port "+str(port)+" open: "+banners.close()except: pass
结果:
因为我实验的机器不是Linux,如果是Linux的话在22端口可能开启了SSH服务
如果开启了,可以用Putty连接试试
如果我们想一次性扫描多台主机,可以使用一个for循环嵌套。最外层的是主机的ip,然后里面的for循环是端口。下面有一个基础的例子,展示了如何通过循环嵌套来构建一个简单的扫描器:
hosts = ['127.0.0.1', '192.168.1.5', '10.0.0.1']ports = [22, 445, 80, 443, 3389]for host in hosts:for port in ports:try:print "[+] Connecting to "+host+":"+str(port)s.connect((host, port))s.send('Primal Security \n')banner = s.recv(1024)if banner:print "[+] Port "+str(port)+" open: "+banners.close()except:pass
结果:
正如你所看到的结果,它把hosts数组里面的所有值都遍历了一次ports数组,等hosts[0]扫描完成之后再扫描hosts[1]依次类推。在这个例子里面你也可以修改里面的代码,只让它显示出可以打开的端口。
这篇关于Python Security 之 端口扫描的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!