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解析json实例方法
Nov 19 Python
详解JavaScript编程中的window与window.screen对象
Oct 26 Python
python实现的多线程端口扫描功能示例
Jan 21 Python
socket + select 完成伪并发操作的实例
Aug 15 Python
Python爬虫天气预报实例详解(小白入门)
Jan 24 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
May 26 Python
Python实用技巧之利用元组代替字典并为元组元素命名
Jul 11 Python
python实现自动登录
Sep 17 Python
Python爬取知乎图片代码实现解析
Sep 17 Python
Python3 main函数使用sys.argv传入多个参数的实现
Dec 25 Python
在tensorflow中实现屏蔽输出的log信息
Feb 04 Python
python 爬取哔哩哔哩up主信息和投稿视频
Jun 07 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
PHP生成静态页面详解
2006/11/19 PHP
PHP学习笔记之二 php入门知识
2011/01/12 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
2012/09/05 PHP
基于curl数据采集之单页面采集函数get_html的使用
2013/04/28 PHP
php跨域cookie共享使用方法
2014/02/20 PHP
深入剖析浏览器退出之后php还会继续执行么
2016/05/17 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
2019/11/04 PHP
js下关于onmouseout、事件冒泡的问题经验小结
2010/12/09 Javascript
jQuery中toggleClass()方法用法实例
2015/01/05 Javascript
JavaScript中模拟实现jsonp
2015/06/19 Javascript
jQuery Ajax页面局部加载方法汇总
2016/06/02 Javascript
Bootstrap实现input控件失去焦点时验证
2016/08/04 Javascript
JS实现简单的tab切换选项卡效果
2016/09/21 Javascript
vue.js指令v-for使用及索引获取
2016/11/03 Javascript
利用Jquery实现几款漂亮实用的时间轴(附示例代码)
2017/02/15 Javascript
vue单个组件实现无限层级多选菜单功能
2018/04/10 Javascript
详解小程序rich-text对富文本支持方案
2018/11/28 Javascript
使用jquery模拟a标签的click事件无法实现跳转的解决
2018/12/04 jQuery
layui实现下拉框三级联动
2019/07/26 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
Python中使用HTMLParser解析html实例
2015/02/08 Python
Python3搜索及替换文件中文本的方法
2015/05/22 Python
使用python实现省市三级菜单效果
2016/01/20 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
python logging日志模块的详解
2017/10/29 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
pyqt5之将textBrowser的内容写入txt文档的方法
2019/06/21 Python
python 使用shutil复制图片的例子
2019/12/13 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
阿提哈德航空官方网站:Etihad Airways
2017/01/06 全球购物
Java语言程序设计测试题改错题部分
2014/07/22 面试题
企业门卫岗位职责
2013/12/12 职场文书
播音主持专业个人自我评价
2014/01/09 职场文书
公司承诺书格式范文
2015/04/28 职场文书
有关花店创业的计划书模板
2019/08/27 职场文书
基于Redis过期事件实现订单超时取消
2021/05/08 Redis