Python Security 之 端口扫描

来源:互联网 发布:常用协议端口有多少 编辑:程序博客网 时间:2024/06/06 05:20

这一章将会演示如何通过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: "+banner        s.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: "+banner       s.close()    except:pass

结果:
第二张
正如你所看到的结果,它把hosts数组里面的所有值都遍历了一次ports数组,等hosts[0]扫描完成之后再扫描hosts[1]依次类推。在这个例子里面你也可以修改里面的代码,只让它显示出可以打开的端口。

0 0
原创粉丝点击