Python实现简易端口扫描器代码实例


Posted in Python onMarch 15, 2017

在网上的一些资料的基础上自己又添了些新内容,算是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实现简易端口扫描器代码实例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python bsddb模块操作Berkeley DB数据库介绍
Apr 08 Python
对于Python的框架中一些会话程序的管理
Apr 20 Python
Python的randrange()方法使用教程
May 15 Python
Pandas统计重复的列里面的值方法
Jan 30 Python
django 多数据库及分库实现方式
Apr 01 Python
python查看矩阵的行列号以及维数方式
May 22 Python
python 负数取模运算实例
Jun 03 Python
python报错: 'list' object has no attribute 'shape'的解决
Jul 15 Python
基于Python实现下载网易音乐代码实例
Aug 10 Python
python Paramiko使用示例
Sep 21 Python
python 获取字典特定值对应的键的实现
Sep 29 Python
python实现简单的名片管理系统
Apr 26 Python
Python使用sftp实现上传和下载功能(实例代码)
Mar 14 #Python
Python实现Youku视频批量下载功能
Mar 14 #Python
Python实现视频下载功能
Mar 14 #Python
python 实现自动远程登陆scp文件实例代码
Mar 13 #Python
python executemany的使用及注意事项
Mar 13 #Python
Python的标准模块包json详解
Mar 13 #Python
python中pandas.DataFrame排除特定行方法示例
Mar 12 #Python
You might like
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
2013/08/16 PHP
Zend Framework分发器用法示例
2016/12/11 PHP
Javascript - HTML的request类
2006/07/15 Javascript
取选中的radio的值
2010/01/11 Javascript
JS性能优化笔记搜索整理
2013/08/21 Javascript
javascript继承机制实例详解
2014/11/20 Javascript
jquery超简单实现手风琴效果的方法
2015/06/05 Javascript
jquery实现简易的移动端验证表单
2015/11/08 Javascript
精通JavaScript的this关键字
2020/05/28 Javascript
JS+Canvas 实现下雨下雪效果
2016/05/18 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
2016/11/30 Javascript
node跨域转发 express+http-proxy-middleware的使用
2018/05/31 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
详解ES6 Promise对象then方法链式调用
2018/10/20 Javascript
Koa日志中间件封装开发详解
2019/03/09 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
[45:18]完美世界DOTA2联赛循环赛 PXG vs IO 第二场 11.06
2020/11/09 DOTA
Python使用修饰器执行函数的参数检查功能示例
2017/09/26 Python
Python网络编程详解
2017/10/31 Python
python中数据爬虫requests库使用方法详解
2018/02/11 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
Python pip安装模块提示错误解决方案
2020/05/22 Python
基于Python的接口自动化读写excel文件的方法
2021/01/15 Python
Python实现一个论文下载器的过程
2021/01/18 Python
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
Laura Geller官网:美国彩妆品牌
2018/12/29 全球购物
大学本科毕业生求职简历的自我评价
2013/10/09 职场文书
毕业生自荐信格式
2014/03/07 职场文书
幼儿园开学寄语
2014/04/03 职场文书
八一建军节营销活动方案
2014/08/31 职场文书
幼儿园园长新年寄语
2015/08/17 职场文书
Python的三个重要函数详解
2022/01/18 Python
Python+Selenium实现读取网易邮箱验证码
2022/03/13 Python