用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. ...
随机推荐
- C++类设计1(Class without pointer members)
class complex{ public: complex (double r = 0, double i = 0):re(r), im(i){} //inline complex& ope ...
- [uiautomator篇][11]wifi
package com.softwinner.network.wifi; import android.content.Context; import android.content.Intent; ...
- 【JavaScript 11—应用总结】:下拉菜单
导读:在web页面的显示中,总是免不了下拉菜单的设置.怎样将菜单设置的更好玩一点呢?这次,就将实现一个下拉菜单的制作.当鼠标移入的时候,菜单显示,鼠标移走,菜单关闭. 一.实现分析 首先,制作一个下拉 ...
- Python之注册表增删改查(干货)
在Windows平台下,对注册表的增删改查的需求比较多,微软提供了很多用于访问,修改注册表等的API,我们可以使用诸如bat,或者C++等各种方式去访问修改注册表.无所不能的python下如何完成这些 ...
- BZOJ 2440 [中山市选2011]完全平方数 ——莫比乌斯函数
$\sum_{i=1}^n[i==d^2*p]$ 其中p无平方因子$=\sum_{d^2\mid n,d>=2}\sum_{i=1}^{\lfloor {n/d^2} \rfloor} \lef ...
- linux命令dhclient
linux命令 dhclient 背景 多台服务器(CentOS7 系统)设置静态IP,其中有台服务器设置了静态IP后,只要重启就变更为其他的,但是配置文件并无改动. 使用命令 #自动获取IP dhc ...
- Nearest Common Ancestors(poj 1330)
题意:给定一棵树,询问两个节点的最近公共祖先. 输入:第一行T,表示测试组数. 每组测试数据包含一个n,表示节点数目,下面n-1行是连接的边,最后一行是询问 输出:共T行,代表每组的测试结果 /* 倍 ...
- 生日聚会 BZOJ 1037
生日聚会 [问题描述] 今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party. hidadz带着朋友们来到花园中,打算坐成一排玩游戏.为了游戏不至于无聊,就座的方案应满足如下条件: ...
- Chrome中输入框默认样式移除
Chrome中输入框默认样式移除 在chrome浏览器中会默认给页面上的输入框如input.textarea等渲染浏览器自带的边框效果 IE8中效果如下: Chrome中效果如下: 这在我们未给输 ...
- Resin Thread Dump
[2015/08/25 20:50:13.254] {ThreadLauncher2[ThreadPool[system]]-1} Thread Dump generated Tue Aug 25 2 ...