python工具打造之实现端口扫描

Python实现端口扫描

工欲善其事必先利其器,所以有时我们就需要编写自己的脚本工具.
下面带来python实现目标端口扫描的教程,希望对大家所帮助.

注意:从2.7版本后不再使用:optparse模块不推荐使用,python不再更新该模块,后续的发展将推荐使用argparse模块。

由于工作性质原因,3.0版本下接触会比较多这里提一点.

教程准备:

1.使用了socket库,optparse库

socket库,网络接口库,主要提供了不同进程间的通讯,以及不同网络间的进程通讯.

optparse库,主要为脚本传递命令参数功能  

2.需要知道我们是如何建立起连接的.

我们调用了socket库,并使用它建立连接,然后关闭它

import socket  
c = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 实例化socket的类,并声明了使用的网络地址类型(socket.AF_INET),socket的类型是TCP类型(socket.SOCK_STREAM)    
c.connect((ip_addr,prot))  # 建立连接,ip_addr为目标ip,prot为目标端口  
c.close()   # 关闭连接  

3.设置我们的命令行参数,由于我们这次的教程,采用从字典中遍历端口的进行扫描的方式,所以我们设置命令行参数时,只需要指定ip地址即可,这里我们定义了一个自定义函数来实现功能

import optparse  
def opt_cmd():  
    parser = optparse.OptionParser("脚本名 -H <目标ip>")  # 当们在命令行输入错误时,进行提示  
    parser.add_option("-H",dest='ip_address',type="string",help="指定目标IP")   #在这里add_option是核心,“-H”是设置的命令参数,dest是临时变量,type用来验证用户输入的类型是否与我们设置的类型相同,help是友好提示信息,一般用来描述这个add的作用,也可以不写  
    (options,args) = parser.parse_args() # 当定义好参数后我们就需要通知optparse来解析你的命令行程序,parse_args()会返回两个值,options(一个对象包含所有选项的值),args(位置参数列表解析后剩下的选项参数)  
    addr = options.ip_address # 将临时变量dest的值给了新的变量addr
    return addr  # 返回addr,也就是我们的输入的IP   

4.读取我们的字典文件

prot_path = "port.txt"   # 我们字典文件的存储路径
def prot_file(port_path):
    port_w = open(port_path,"r")  # 读取字典内容
    port_list = duan_w.readlines() # 将读取的内容转换为列表
    return port_list  #返回这个列表  

通过上面的了解,我们应该明白
· 如何建立连接,关闭连接
· 设置命令行参数
· 调用字典

接下来附上我们的整体代码,需要说明的是,由于我的端口字典存储在和脚本相同的目录下,所以需要先cd 到同级目录下执行

import socket
import optparse  

c = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 实例化socket的类,并声明了使用的网络地址类型(socket.AF_INET),socket的类型是TCP类型(socket.SOCK_STREAM)    
port_path = "port.txt"   # 我们字典文件的存储路径

#端口扫描  
def scan(addr,c):
    portlist = port_file(port_path)
    for i in portlist:      
        try:
            c =  socket.socket(socket.AF_INET,socket.SOCK_STREAM)
            c.connect((addr,int(i))) #建立连接
            print(str(i)+"这个端口是开启的")
            c.close()
        except:
            # ~ print(str(i)+"这个端口是关闭的")
            c.close()

#字典内容获取
def port_file(port_path):
    port_w = open(port_path,"r")  # 读取字典内容
    port_list = port_w.readlines() # 将读取的内容转换为列表
    return port_list  #返回这个列表  

#设置命令参数
def opt_cmd():  
    parser = optparse.OptionParser("脚本名 -H <目标ip>")  # 当们在命令行输入错误时,进行提示  
    parser.add_option("-H",dest='ip_address',type="string",help="指定目标IP")   #在这里add_option是核心,“-H”是设置的命令参数,dest是临时变量,type用来验证用户输入的类型是否与我们设置的类型相同,help是友好提示信息,一般用来描述这个add的作用,也可以不写  
    (options,args) = parser.parse_args() # 当定义好参数后我们就需要通知optparse来解析你的命令行程序,parse_args()会返回两个值,options(一个对象包含所有选项的值),args(位置参数列表解析后剩下的选项参数)  
    addr = options.ip_address # 将临时变量dest的值给了新的变量addr
    return addr  # 返回addr,也就是我们的输入的IP   


#进行调用  
if __name__ == "__main__":
    addr = opt_cmd()
    scan(addr,c)

猜你喜欢

转载自blog.csdn.net/key_book/article/details/80460110