#coding = utf-8

 '''
python 3.4
通过简单的TCP端口连接来判断指定IP是否开放了指定端口。
''' import socket
import optparse
import re
import threading
import sys def anlyze_host(target_host):
#将从--host参数获取到的目标值转换为标准的xxx.xxx.xxx.xxx形式,其中主要是利用socket的gethostbyname函数将域名形式的值转换为四位点进制形式
try:
pattern = re.compile(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}') #匹配标准点进制的IP
match = pattern.match(target_host)
if match:
return(match.group())
else:
try:
target_host = socket.gethostbyname(target_host) #如果不是,就把target_host的值作为域名进行解析
return(target_host)
except Exception as err:
print('地址解析错误:',err)
exit(0)
except Exception as err:
print('请注意错误1:',sys.exc_info()[0],err)
print(parser.usage)
exit(0) def anlyze_port(target_port):
#解析--port参数传入的值,返回端口列表
try:
pattern = re.compile(r'(\d+)-(\d+)') #解析连接符-模式
match = pattern.match(target_port)
if match:
start_port = int(match.group(1))
end_port = int(match.group(2))
return([x for x in range(start_port,end_port + 1)])
else:
return([int(x) for x in target_port.split(',')])
except Exception as err:
print('请注意错误2:',sys.exc_info()[0],err)
print(parser.usage)
exit(0) def scanner(target_host,target_port):
#创建一个socket对象
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.settimeout(5)
try:
s.connect((target_host,target_port))
#s.sendall(b'hello\r\n\r\n')
#message = s.recv(100)
#if message:
print('[+]%s的%3s端口:打开' % (target_host,target_port)) #若可以建立连接,表示此端口是打开的
# print(' %s' % message.decode('utf-8'))
except socket.timeout:
print('[-]%s的%3s端口:关闭' % (target_host,target_port)) #如果连接超时,表示此端口关闭
except Exception as err:
print('请注意错误3:',sys.exc_info()[0],err)
exit(0) def main():
usage = 'Usage:%prog -h <host> -p <port>'
parser = optparse.OptionParser(usage,version='%prog v1.0')
parser.add_option('--host',dest='target_host',type='string',
help='需要扫描的主机,域名或IP')
parser.add_option('--port',dest='target_port',type='string',
help='需要扫描的主机端口,支持1-100或21,53,80两种形式')
(options,args) = parser.parse_args()
if options.target_host == None or options.target_port == None:
print(parser.usage)
exit(0)
else:
target_host = options.target_host
target_port = options.target_port target_host = anlyze_host(target_host)
target_port = anlyze_port(target_port) for port in target_port:
t = threading.Thread(target=scanner,args=(target_host,port))#多线程扫描端口
t.start() if __name__ == '__main__':
main()

运行的结果为:

 c:\Python34\python.exe TcpScanner.py --host 192.168.2.1 --port 1-1024
[+]192.168.2.1的 25端口:打开
[+]192.168.2.1的110端口:打开
[+]192.168.2.1的119端口:打开
[+]192.168.2.1的143端口:打开
[+]192.168.2.1的465端口:打开
[+]192.168.2.1的563端口:打开
[+]192.168.2.1的587端口:打开
[+]192.168.2.1的993端口:打开
[+]192.168.2.1的995端口:打开
[+]192.168.2.1的 80端口:打开
[-]192.168.2.1的 1端口:关闭
[-]192.168.2.1的 18端口:关闭
[-]192.168.2.1的 4端口:关闭
[-]192.168.2.1的 8端口:关闭
[-]192.168.2.1的 13端口:关闭
[-]192.168.2.1的 9端口:关闭
[-]192.168.2.1的 42端口:关闭
[-]192.168.2.1的 19端口:关闭
[-]192.168.2.1的 67端口:关闭
[-]192.168.2.1的 21端口:关闭
[-]192.168.2.1的 14端口:关闭
[-]192.168.2.1的 17端口:关闭
……

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

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

    转自 使用Python编写简单的端口扫描器的实例分享_python_脚本之家 http://www.jb51.net/article/76630.htm -*- coding:utf8 -*- #!/ ...

  2. Python实现简易端口扫描器

    在网上的一些资料的基础上自己又添了些新内容,算是Python socket编程练手吧. #coding=utf-8 import socket import time import sys impor ...

  3. day-1 用python编写一个简易的FTP服务器

    从某宝上购买了一份<Python神经网络深度学习>课程,按照视频教程,用python语言,写了一个简易的FTP服务端和客户端程序,以前也用C++写过聊天程序,编程思路差不多,但是pytho ...

  4. 用python编写的无线AP扫描器

    代码如下: #coding=utf-8 import os import sys import subprocess from scapy.all import * RSN = 48 #管理帧信息元素 ...

  5. linux下简易端口扫描器

    #include<iostream> #include<string.h> #include<sys/types.h> #include<sys/socket ...

  6. Python与Hack之window下运行带参数的Python脚本,实现一个简单的端口扫描器

    1.前提是:windows已经配置好Python的环境变量: 2.进入cmd命令行模式: **输入python命令,检测是否环境配置好:显示这样说明配置环境变量没问题 **用cd命令进入Python脚 ...

  7. mac/unix系统:C++实现一个端口扫描器

    在比较早以前,我用过S扫描器, 以及大名鼎鼎的nmap扫描器, 可以快速扫描某个主机开放的端口, 今天使用C实现这样一个软件, 编译环境为Mac, 系统版本10.11.6: #include < ...

  8. 【转载】Python编写简易木马程序

    转载来自: http://drops.wooyun.org/papers/4751?utm_source=tuicool 使用Python编写一个具有键盘记录.截屏以及通信功能的简易木马. 首先准备好 ...

  9. Python脚本写端口扫描器(socket,python-nmap)

    目录 Socket模块编写 扫描给定主机是否开放了指定的端口 python-nmap模块编写 扫描给定ip或给定网段内指定端口是否开放 一个用python写的简单的端口扫描器,python环境为 3. ...

随机推荐

  1. luogu3698 [CQOI2017]小Q的棋盘

    最长链是根节点到深度最深的结点的路径. 显然,要么直接走最长链,要么兜兜转转几个圈圈再走最长链,而最长链以外的结点因为要"兜圈",所以要经过两次. #include <ios ...

  2. [android开发篇][android studio 和elipse都需要的流程 android sdk的安装

    第三步.下载并安装AndroidSDK 前面两步,我们已经配置了JDK变量环境,并安装好了Eclipse,通过这两步之后Java的开发环境就准备好了,如果我们只是开发普通的JAVA应用程序的话,那么到 ...

  3. HDu-1247 Hat’s Words,字典树裸模板!

    Hat's Words 题意:给出一张单词表求有多少个单词是由单词表里的两个单词组成,可以重复!按字典序输出这些单词. 思路:先建一个字典树,然后枚举每个单词,把每个单词任意拆分两部分然后查找. 目测 ...

  4. 使用Apriori算法进行关联分析

    关联分析是一种在大规模数据集中寻找有趣关系的任务.这些关系可以有两种形式:频繁项集或者关联规则.频繁项集是指经常出现在一块的物品的集合,关联规则暗示两种物品之间可能存在很强的关系.一个项集的支持度被定 ...

  5. HDU——1059Dividing(母函数或多重背包)

    Dividing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  6. BZOJ 3529 [Sdoi2014]数表 ——莫比乌斯反演 树状数组

    $ans=\sum_{i=1}^n\sum_{j=1}^n\sigma(gcd(i,j))$ 枚举gcd为d的所有数得到 $ans=\sum_{d<=n}\sigma(d)*g(d)$ $g(d ...

  7. BZOJ 4037 [HAOI2015]数字串拆分 ——动态规划

    拆分的情况下,发现f数组本身并不是很好递推. 因为f(123)=f(123)/f(12+3)/f(1+2+3). 然后考虑f可以怎么表示f(n)=a0*M^n M为转移矩阵. 然后发现 f(x+y)= ...

  8. [ZJOI2007]棋盘制作 (单调栈,动态规划)

    题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个 8 \times 88×8 大小的黑白相间的方阵,对应八八六十四卦, ...

  9. 虚拟机vmnet0、vmnet1和vmnet8的区别 虚拟网卡概述

    vmnet0,实际上就是一个虚拟的网桥 vmnet0,实际上就是一个虚拟的网桥,这个网桥有很若干个端口,一个端口用于连接你的Host,一个端口用于连接你的虚拟机,他们的位置是对等的,谁也不是谁的网关. ...

  10. Honey Heist

    5092: Honey Heist 时间限制: 1 Sec  内存限制: 128 MB 题目描述 0x67 is a scout ant searching for food and discover ...