Python实现简易端口扫描器
在网上的一些资料的基础上自己又添了些新内容,算是Python socket编程练手吧。
#coding=utf-8
import socket
import time
import sys
import struct
import threading
from threading import Thread,activeCount results=[]
def portScanner(ip,port):
server = (ip,port)
sockfd = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sockfd.settimeout(0.1) #设置阻塞模式下socket的超时时间
ret = sockfd.connect_ex(server) #成功返回0,失败返回error的值。
if not ret:
sockfd.close()
results.append([ip,port])
#print '%s:%s is opened...' % (ip,port)
else:
sockfd.close()
pass
return '' def ip2num(ip): #将ip地址转换成数字
lp = [int(x) for x in ip.split('.')]
return lp[0] << 24 | lp[1] << 16 | lp[2] << 8 |lp[3] def num2ip(num):
ip = ['','','','']
ip[3] = (num & 0xff)
ip[2] = (num & 0xff00) >> 8
ip[1] = (num & 0xff0000) >> 16
ip[0] = (num & 0xff000000) >> 24
return '%s.%s.%s.%s' % (ip[0],ip[1],ip[2],ip[3]) def iprange(ip1,ip2):
num1 =socket.ntohl(struct.unpack("I",socket.inet_aton(str(ip1)))[0])
num2 =socket.ntohl(struct.unpack("I",socket.inet_aton(str(ip2)))[0])
tmp = num2 - num1
if tmp < 0:
return None
else:
return num1,num2,tmp if __name__ == '__main__': if((len(sys.argv)!= 4)&(len(sys.argv)!= 2)): #用法说明
print 'Usage:\n\tscanner.py startip endip port'
print '\tscanner.py ip'
sys.exit() if len(sys.argv)==4: #对某一IP段的扫描
time_start=time.time() #起始时间
startip = sys.argv[1] #起始IP
endip = sys.argv[2] #结束IP
port = int(sys.argv[3]) #端口号 res = iprange(startip,endip)
if not res:
print 'endip must be bigger than startone'
sys.exit()
elif res[2] == 0:
portScanner(startip,port)
else:
for x in xrange(int(res[2])+1): #IP地址依次递增
startipnum = ip2num(startip)
startipnum = startipnum + x
if activeCount() <=1000:
Thread(target=portScanner,args=(num2ip(startipnum),port)).start() print "There are %d hosts." %len(results)
results.sort()
for ip,port in results:
print "%s:%d is opened..." %(ip,port)
times=time.time()-time_start #用时
print 'use time : %s' % times if len(sys.argv)==2:
time_start=time.time()
port=0
ip=sys.argv[1]
while(port<2000):
if activeCount() <= 40: #设置40线程扫描
Thread(target = portScanner, args = (ip, port)).start()
port=port+1
results.sort()
for ip,port in results:
print "%s:%d is opened..." %(ip,port)
times=time.time()-time_start
print 'use time : %s' % times
使用效果如下:


Python实现简易端口扫描器的更多相关文章
- Python脚本写端口扫描器(socket,python-nmap)
目录 Socket模块编写 扫描给定主机是否开放了指定的端口 python-nmap模块编写 扫描给定ip或给定网段内指定端口是否开放 一个用python写的简单的端口扫描器,python环境为 3. ...
- 『Python』 多线程 端口扫描器
0x 00 Before Coding 当端口打开时,向端口发送 TCP SYN 请求,会返回一个 ACK 响应: 当端口关闭,返回的是 RST 响应: 0x 01 Coding 可以用 socke ...
- 用python编写的简易端口扫描器
#coding = utf-8 ''' python 3.4 通过简单的TCP端口连接来判断指定IP是否开放了指定端口. ''' import socket import optparse impor ...
- python 多ip端口扫描器
from socket import * import threading #导入线程相关模块 import re # qianxiao996精心制作 #博客地址:https://blog.csdn. ...
- python单ip端口扫描器
from socket import * import threading #导入线程相关模块 # qianxiao996精心制作 #博客地址:https://blog.csdn.net/qq_363 ...
- linux下简易端口扫描器
#include<iostream> #include<string.h> #include<sys/types.h> #include<sys/socket ...
- mac/unix系统:C++实现一个端口扫描器
在比较早以前,我用过S扫描器, 以及大名鼎鼎的nmap扫描器, 可以快速扫描某个主机开放的端口, 今天使用C实现这样一个软件, 编译环境为Mac, 系统版本10.11.6: #include < ...
- 再议perl写多线程端口扫描器
再议perl写多线程端口扫描器 http://blog.csdn.net/sx1989827/article/details/4642179 perl写端口多线程扫描器 http://blog.csd ...
- [原创]开源跨平台大型网络端口扫描器K8PortScan(支持批量A段/B段/C段/IP列表)
0x000 K8PortScan Python版Cscan端口扫描器 Code: https://github.com/k8gege/K8PortScan K8portScan 1.0 Date: 2 ...
随机推荐
- 用JS常规方法是否离开当前页面
该方法在 关闭页面时 会提示 <script type="text/javascript"> var DispClose = true; function CloseE ...
- javascript 常用api
常用API合集 来源于:https://www.kancloud.cn/dennis/tgjavascript/241852 一.节点 1.1 节点属性 Node.nodeName //返回节点名称, ...
- C#基础——结构体
集合:数组:同一类型,固定长度集合:不同类型,不固定长度 要使用集合,必须先引用命名空间:using System.Collections; 定义:ArrayList arr = new ArrayL ...
- Python入门教程(1)
人生苦短,我用Python! Python(英语发音:/ˈpaɪθən/), 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于19 ...
- HTML移动端开发常见的兼容性总结
1.安卓浏览器看背景图片,有些设备会模糊.用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢?经过研究,是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率来显示网 ...
- 【webpack】-- 模块热替换
全称是Hot Module ReplaceMent(HMR),理解成热模块替换或者模块热替换都可以吧,和.net中的热插拔一个意思,就是在运行中对程序的模块进行更新.这个功能主要是用于开发过程中,对生 ...
- [干货来袭]C#7.0新特性(VS2017可用)
前言 微软昨天发布了新的VS 2017 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下其实2016年12月就已经公布了的C#7 ...
- [hdu2156]分数矩阵
Problem Description 我们定义如下矩阵:1/1 1/2 1/31/2 1/1 1/21/3 1/2 1/1矩阵对角线上的元素始终是1/1,对角线两边分数的分母逐个递增.请求出这个矩阵 ...
- 3892: [Usaco2014 Dec]Marathon
3892: [Usaco2014 Dec]Marathon Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 169 Solved: 100[Submi ...
- java深拷贝和浅拷贝
1.概念 java里的clone分为: A:浅复制(浅克隆): 浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. b:深复制(深克隆):深复制把要复制的对象所引用的对象都复制了一遍. Java中对 ...