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 ...
随机推荐
- Java版本
Java版本 Java版本分为J2SE(Java 2 Standard Edition,Java标准版).J2ME(Java 2 Micro Edition,Java微型版本)和J2EE(Java 2 ...
- Jemter+Badboy实战经验一(Badboy录制及基础功能)
1. 使用工具: Apache Jemeter:http://jmeter.apache.org/download_jmeter.cgi (免费官网下载地址) BadBoy: http://www ...
- visibility: hidden和 display: none的区别
visibility: hidden----将元素隐藏,但是在网页中该占的位置还是占着. display: none----将元素的显示设为无,即在网页中不占任何的位置.
- 关于报错:AttributeError: module 'turtle' has no attribute 'setup' 问题
对于我们菜鸟,往往安装软件后,都容易使用默认设置,结果将写的文件保存到了安装目录下. 这样造成了很大得隐患,如果写得文件,名称与安装目录下得系统文件名称重复,就容易出现以上报错. 解决方法:1.将文件 ...
- LODOP的一次使用后的总结
一.lodop打印预览效果图 LODOP.PRINT_SETUP();打印维护效果图 LODOP.PREVIEW();打印预览图 二.写在前面 最近项目用到了LODOP的套打,主要用到两个地方,一是物 ...
- RabbitMQ-从基础到实战(2)— 防止消息丢失
转载请注明出处 1.简介 RabbitMQ中,消息丢失可以简单的分为两种:客户端丢失和服务端丢失.针对这两种消息丢失,RabbitMQ都给出了相应的解决方案. 2.防止客户端丢失消息 如图,生产者P向 ...
- HTML5学习笔记<一>: 认识H5
什么是 HTML5? HTML5 将成为 HTML.XHTML 以及 HTML DOM 的新标准. HTML 的上一个版本诞生于 1999 年.自从那以后,Web 世界已经经历了巨变. HTML5 仍 ...
- selenium+python 自动化中界面滚动条操作方法
虽然webdriver提供了操作浏览器的前进和后退的方法,但对于浏览器滚动条并没有提供相应的操作方法,以下使用的方法: 借助JavaScript来控制浏览器的滚动条,webdriver提供了execu ...
- SQL函数和SQL Server2008
1.绝对值 SQL:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.00 ...
- java 学习 todoList
1.并发包的使用 2.线程相关的源码,怎么结束一个线程 3.单例模式代码 4.mixin 相关的理解代码 书单: effective java java 编程思想 spring 编程指南 深入理解jv ...