python 学习系列--任务2

通过Python的网络连接开发一个基础的端口扫描器
思路:使用socket重复连接ip与端口的组合新值

0x01 知识补充 for循环

for port in range(100,120):
  print"[+]port:"+str(port)

执行结果:
python 学习系列--任务2
0x02 建立一个socket连接

import socket  #导入socket模块
s=socket.socket()
s.connect(('127.0.0.1',80))#指定IP与端口,这随便用一个

调用了connect函数,它会建立一个TCP连接(SYN/SYN-ACK/ACK),要注意代码的缩进问题。

执行结果:

python 学习系列--任务2

0x03 使用"try/except"循环来处理错误

try:
 s.connect(('127.0.0.1', 80))
except: pass

执行结果:
python 学习系列--任务20x04 扫描多个指定端口

import socket
s = socket.socket() 
ports = [22, 445, 80, 443, 3389]
for port in ports:
   try:
    print "[+] Attempting to connect to 192.168.220.1:"+str(port)
    s.connect(('192.168.220.1', port))
    s.send('zhimakaimen\n')    
    ban = s.recv(1024)
    if ban:
      print "[+] Port "+str(port)+" open: "+ban
    s.close()
   except: pass

使用数组来存储端口,然后遍历这一个数组,然后使用"if"条件语句打印出可以连接成功的端口。写代码的时候要注意特别注意格式问题,语法错误比较扎心,这里给出的执行结果和代码的有一点不一样,只是端口不同而已,无大碍。

执行结果:
python 学习系列--任务2

0x05 扫描多个主机,多个端口


import socket
s = socket.socket() 
ports = [22, 445, 80, 443, 3389]
hosts = ['127.0.0.1', '192.168.220.1', '10.0.0.1']
for host in hosts:
 for port in ports:
   try:
    print "[+] Connecting to "+host+":"+str(port)
    s.connect((host, port))
    s.send('zhimakaimen \n')    
    ban = s.recv(1024)
    if ban:
      print "[+] Port "+str(port)+" open: "+ban
    s.close()
   except: pass

使用for循环嵌套,外层为主机ip,内层为端口。

执行结果:
python 学习系列--任务2
最后,需要了解更多socket内容可以使用dir(socket)和和help(),这里用dir(socket)。
python 学习系列--任务2