用python编写的简易端口扫描器

 1 #coding = utf-8
 2
 3 ‘‘‘
 4 python 3.4
 5 通过简单的TCP端口连接来判断指定IP是否开放了指定端口。
 6 ‘‘‘
 7
 8 import socket
 9 import optparse
10 import re
11 import threading
12 import sys
13
14 def anlyze_host(target_host):
15 #将从--host参数获取到的目标值转换为标准的xxx.xxx.xxx.xxx形式,其中主要是利用socket的gethostbyname函数将域名形式的值转换为四位点进制形式
16     try:
17         pattern = re.compile(r‘\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}‘) #匹配标准点进制的IP
18         match = pattern.match(target_host)
19         if match:
20             return(match.group())
21         else:
22             try:
23                 target_host = socket.gethostbyname(target_host) #如果不是,就把target_host的值作为域名进行解析
24                 return(target_host)
25             except Exception as err:
26                 print(‘地址解析错误:‘,err)
27                 exit(0)
28     except Exception as err:
29         print(‘请注意错误1:‘,sys.exc_info()[0],err)
30         print(parser.usage)
31         exit(0)
32
33
34 def anlyze_port(target_port):
35 #解析--port参数传入的值,返回端口列表
36     try:
37         pattern = re.compile(r‘(\d+)-(\d+)‘)    #解析连接符-模式
38         match = pattern.match(target_port)
39         if match:
40             start_port = int(match.group(1))
41             end_port = int(match.group(2))
42             return([x for x in range(start_port,end_port + 1)])
43         else:
44             return([int(x) for x in target_port.split(‘,‘)])
45     except Exception as err:
46         print(‘请注意错误2:‘,sys.exc_info()[0],err)
47         print(parser.usage)
48         exit(0)
49
50 def scanner(target_host,target_port):
51 #创建一个socket对象
52     s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
53     s.settimeout(5)
54     try:
55         s.connect((target_host,target_port))
56         #s.sendall(b‘hello\r\n\r\n‘)
57         #message = s.recv(100)
58         #if message:
59         print(‘[+]%s的%3s端口:打开‘ % (target_host,target_port)) #若可以建立连接,表示此端口是打开的
60            # print(‘ %s‘ % message.decode(‘utf-8‘))
61     except socket.timeout:
62         print(‘[-]%s的%3s端口:关闭‘ % (target_host,target_port)) #如果连接超时,表示此端口关闭
63     except Exception as err:
64         print(‘请注意错误3:‘,sys.exc_info()[0],err)
65         exit(0)
66
67
68
69 def main():
70    usage = ‘Usage:%prog -h <host> -p <port>‘
71    parser = optparse.OptionParser(usage,version=‘%prog v1.0‘)
72    parser.add_option(‘--host‘,dest=‘target_host‘,type=‘string‘,
73                      help=‘需要扫描的主机,域名或IP‘)
74    parser.add_option(‘--port‘,dest=‘target_port‘,type=‘string‘,
75                     help=‘需要扫描的主机端口,支持1-100或21,53,80两种形式‘)
76    (options,args) = parser.parse_args()
77    if options.target_host == None or options.target_port == None:
78       print(parser.usage)
79       exit(0)
80    else:
81       target_host = options.target_host
82       target_port = options.target_port
83
84    target_host = anlyze_host(target_host)
85    target_port = anlyze_port(target_port)
86
87    for port in target_port:
88       t = threading.Thread(target=scanner,args=(target_host,port))#多线程扫描端口
89       t.start()
90
91 if __name__ == ‘__main__‘:
92    main()  

运行的结果为:

 1 c:\Python34\python.exe TcpScanner.py --host 192.168.2.1 --port 1-1024
 2 [+]192.168.2.1的 25端口:打开
 3 [+]192.168.2.1的110端口:打开
 4 [+]192.168.2.1的119端口:打开
 5 [+]192.168.2.1的143端口:打开
 6 [+]192.168.2.1的465端口:打开
 7 [+]192.168.2.1的563端口:打开
 8 [+]192.168.2.1的587端口:打开
 9 [+]192.168.2.1的993端口:打开
10 [+]192.168.2.1的995端口:打开
11 [+]192.168.2.1的 80端口:打开
12 [-]192.168.2.1的  1端口:关闭
13 [-]192.168.2.1的 18端口:关闭
14 [-]192.168.2.1的  4端口:关闭
15 [-]192.168.2.1的  8端口:关闭
16 [-]192.168.2.1的 13端口:关闭
17 [-]192.168.2.1的  9端口:关闭
18 [-]192.168.2.1的 42端口:关闭
19 [-]192.168.2.1的 19端口:关闭
20 [-]192.168.2.1的 67端口:关闭
21 [-]192.168.2.1的 21端口:关闭
22 [-]192.168.2.1的 14端口:关闭
23 [-]192.168.2.1的 17端口:关闭
24 ……
时间: 07-20

用python编写的简易端口扫描器的相关文章

使用Python编写简单的端口扫描器的实例分享【转】

转自 使用Python编写简单的端口扫描器的实例分享_python_脚本之家 http://www.jb51.net/article/76630.htm -*- coding:utf8 -*- #!/usr/bin/python # Python: 2.7.8 # Platform: Windows # Authro: wucl # Program: 端口扫描 # History: 2015.6.1 import socket, time, thread socket.setdefaulttim

用python编写的无线AP扫描器

代码如下: 1 #coding=utf-8 2 3 import os 4 import sys 5 import subprocess 6 from scapy.all import * 7 8 9 RSN = 48 #管理帧信息元素(Dot11Elt)ID48是RSN信息 10 WPA = 221 #管理帧信息元素ID221是WPA信息 11 Dot11i = {0:'GroupCipher', 12 1:'WEP-40', 13 2:'TKIP', 14 4:'CCMP', 15 5:'W

Python编写简易木马程序(转载乌云)

Python编写简易木马程序 light · 2015/01/26 10:07 0x00 准备 文章内容仅供学习研究.切勿用于非法用途! 这次我们使用Python编写一个具有键盘记录.截屏以及通信功能的简易木马.依然选用Sublime text2 +JEDI(python自动补全插件)来撸代码,安装配置JEDI插件可以参照这里: /tips/?id=4413 首先准备好我们需要的依赖库,python hook和pythoncom. 下载安装python hook 下载安装pythoncom模块:

python端口扫描器

吃了个火鸡面后感觉到了怀疑人生!!!!!!!!!妈耶,在也不吃了.思路都给辣没了!!! python端口扫描器代码如下: #-*-coding:utf-8 from socket import * import threading import argpars lock=threading.lock() openNUm=0 threads=[] def portScanner(host,port): global openNum try: s=socket(AF_INET,SOCK_STREAM

python实现FTP弱口令扫描器与简单端口扫描器

python实现FTP弱口令扫描器与简单端口扫描器 目录 FTP弱口令扫描器 简单端口扫描器 参考: https://blog.csdn.net/rebelqsp/article/details/22109925 https://www.aliyun.com/jiaocheng/434055.html?spm=5176.100033.2.10.3571581eheCuHX FTP弱口令扫描器 # Ftp匿名扫描器的实现,需要使用FTP这个类 # Ftp这个类实现了Ftp客户端的大多数功能,比如连

Python开发端口扫描器

首先是最常用的端口扫描器: 虽说有nmap等强大的工具,不过如果由于条件限制无法安装Nmap呢? 我这个脚本写的比较简单,默认扫描1-65535全部的端口 实际的话,可以根据需要自己修改脚本来实现定制化扫描 # -*- coding:utf-8 -*- __author__ = "Yiqing" import socket import time import thread import optparse import re socket.setdefaulttimeout(3) de

Python脚本--端口扫描器

一个用python写的简单的端口扫描器,python环境为 3.7.0,windows系统 扫描给定主机是否开放了指定的端口TCP连接扫描是利用TCP的三次握手来确定主机的端口是否开放.确定主机端口开放之后,给端口发送消息,接收端口返回的消息,然后判断该端口运行的服务.使用时,-H?参数可以提供主机的域名或者ip地址,-p/-P?写要扫描的端口,多个端口用逗号分隔 ''' @Author:yw 参考书籍:<python绝技:运用python成为顶级***> ''' import optpars

Gvim入门(3)——简易配置python编写环境

用Gvim配置python编写环境最重要的也是最基本的一项就是要在Gvim的配置启动文件中,也就是在安装目录下的_vimrc中添加配置python解释器的代码.然而前提是要有配置好环境变量. 总结一下就是: (1)配置环境变量: 将python的路径添加到系统的环境变量的path里面,注意加分号.不会的就去百度里面google一下. (2)测试python配置环境变量是否成功: 在win+r,键入cmd,在dos(命令提示符)中键入python,如果结果是下图的情况,表示python环境变量配置

java编写一个端口扫描器

好久没写java了,学的时候,也没学习网络编程这一块,无意中看到了一本书,于是小小复习一下java,写个端口扫描器,玩玩吧,网上这种小公具有的是,就是自己无聊写着玩玩. 源代码如下: 共两个类,比较简单奥 import javax.swing.*; import java.awt.Dimension; import java.awt.Font; import java.awt.Toolkit; import java.awt.event.*; public class PortScan exte