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 ...
随机推荐
- lxd-启动篇分析
lxd是什么:lxd是基于lxc构筑的容器管理进程,提供镜像,网络,存储,以及容器的能力,对外暴漏restfull API.其与docker的区别是docker更切近与app container,以应 ...
- C++设计模式:Template Method
我使用过一个简单的后台服务框架.这个框架上手很容易,我只需要继承一个基类,同时实现,或重写(override)基类声明的几个接口(这些接口声明为虚函数,或者纯虚函数),然后调用基类定义好的run()函 ...
- 1740: [Usaco2005 mar]Yogurt factory 奶酪工厂
1740: [Usaco2005 mar]Yogurt factory 奶酪工厂 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 119 Solved: ...
- Servlet 3.0/3.1 中的异步处理
在Servlet 3.0之前,Servlet采用Thread-Per-Request的方式处理请求,即每一次Http请求都由某一个线程从头到尾负责处理.如果一个请求需要进行IO操作,比如访问数据库.调 ...
- Python第五章__模块介绍,常用内置模块
Python第五章__模块介绍,常用内置模块 欢迎加入Linux_Python学习群 群号:478616847 目录: 模块与导入介绍 包的介绍 time &datetime模块 rando ...
- 如果服务器不能把编码格式改成UTF8怎么办?(20161113)
//数组内容的编码格式:utf8 /* 如果服务器不能把编码格式改成UTF8 则在方法里的执行sql语句之前输入下面三段代码就可以使得返回的数组的编码格式为UTF8 $conn->query(' ...
- java实体属性对应mysql和SQL Server 和Oracle 数据类型对应
1:Java数据类型与MySql数据类型对照表 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) VARCHAR L+N VARCHAR java.lang.String 12 ...
- spring-AOP-基于Schema切面的小例子
前言: 如果一个项目没有 jdk 5.0 , 那就无法使用基于@AspectJ 注解 的切面. 但是使用AspectJ的表达式的大门还是可以使用的. 我们可以用java提供的Schema配置方法,来替 ...
- Zeppelin interperter 模式设置总结
如有错漏,望请指正,不胜感激. 参考:[zeppelin官网]:https://zeppelin.apache.org/docs/latest/interpreter/spark.html#inter ...
- HTTP认证
参考博文:HTTP协议详解 HTTP请求报头: Authorization HTTP响应报头: WWW-Authenticate HTTP认证是基于质询/回应(challenge/response)的 ...