用python编写的简易端口扫描器
#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编写的简易端口扫描器的更多相关文章
- 使用Python编写简单的端口扫描器的实例分享【转】
转自 使用Python编写简单的端口扫描器的实例分享_python_脚本之家 http://www.jb51.net/article/76630.htm -*- coding:utf8 -*- #!/ ...
- Python实现简易端口扫描器
在网上的一些资料的基础上自己又添了些新内容,算是Python socket编程练手吧. #coding=utf-8 import socket import time import sys impor ...
- day-1 用python编写一个简易的FTP服务器
从某宝上购买了一份<Python神经网络深度学习>课程,按照视频教程,用python语言,写了一个简易的FTP服务端和客户端程序,以前也用C++写过聊天程序,编程思路差不多,但是pytho ...
- 用python编写的无线AP扫描器
代码如下: #coding=utf-8 import os import sys import subprocess from scapy.all import * RSN = 48 #管理帧信息元素 ...
- linux下简易端口扫描器
#include<iostream> #include<string.h> #include<sys/types.h> #include<sys/socket ...
- Python与Hack之window下运行带参数的Python脚本,实现一个简单的端口扫描器
1.前提是:windows已经配置好Python的环境变量: 2.进入cmd命令行模式: **输入python命令,检测是否环境配置好:显示这样说明配置环境变量没问题 **用cd命令进入Python脚 ...
- mac/unix系统:C++实现一个端口扫描器
在比较早以前,我用过S扫描器, 以及大名鼎鼎的nmap扫描器, 可以快速扫描某个主机开放的端口, 今天使用C实现这样一个软件, 编译环境为Mac, 系统版本10.11.6: #include < ...
- 【转载】Python编写简易木马程序
转载来自: http://drops.wooyun.org/papers/4751?utm_source=tuicool 使用Python编写一个具有键盘记录.截屏以及通信功能的简易木马. 首先准备好 ...
- Python脚本写端口扫描器(socket,python-nmap)
目录 Socket模块编写 扫描给定主机是否开放了指定的端口 python-nmap模块编写 扫描给定ip或给定网段内指定端口是否开放 一个用python写的简单的端口扫描器,python环境为 3. ...
随机推荐
- IE浏览器部分js代码不生效的问题
[小小坑记录] 问题描述:IE浏览器写好功能代码之后,在调试模式下程序能正常运行.不开启调试模式正常访问时js部分功能代码不生效. 原因:在测试时用了console对象在控制台输出一一些内容,而IE的 ...
- Linux 文件/文件夹重命名
mv命令既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为Bmv A B 例子:将/a目录移动到/b下,并重命名为cmv /a /b/c 其实在文本模式中要重命名文件或目录,只需要使用mv ...
- oracle表空间,分区表,以及索引的总结
表空间: Oracle的UNDOTBS01.DBF文件太大的解决办法 1..禁止undo tablespace自动增长 alter database datafile 'full_path ...
- PTA 10-排序4 统计工龄 (20分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/721 5-13 统计工龄 (20分) 给定公司NN名员工的工龄,要求按工龄增序输出每 ...
- 移动端没有session怎么处理
(转:https://my.oschina.net/wanglihui/blog/150726) 手机客户端与服务器端的通信,不同于浏览器与服务器端的通信.浏览器和服务器端的通信依靠session去维 ...
- hihoCoder 1367 等式填空
明确题意 等号左边是由'+'和'?'组成的算式,其中处于某个整数(即便这个整数只有一位)首位的'?'可以填入1-9中的某个数字,其余'?'可以填入0-9中的某个数字. SOURCE 这里未明确等号左边 ...
- [UOJ#129][BZOJ4197][Noi2015]寿司晚宴
[UOJ#129][BZOJ4197][Noi2015]寿司晚宴 试题描述 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司 ...
- pageContext,request,session,application生命周期
equest是封装client端(也就是用户通过browser)提交的请求数据和属性的对象. response是封装web server端响应数据和属性的对象. 我们经常会将pageContext.r ...
- 火柴排队(codevs 3286)
题目描述 Description 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度.现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:,其中 ai表示第一列 ...
- 洛谷 [P3265] 装备购买
线性基 通过题目描述可以感觉到就是要求线性基, 线性基的求法是高斯消元,消完以后剩下的x的系数非 0 的就是线性基 本题有一个贪心策略,每次挑选价格最小的来消掉其他的元 //可以快排预处理 #incl ...