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 UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
Apr 24 Python
python生成器表达式和列表解析
Mar 10 Python
JS设计模式之责任链模式实例详解
Feb 03 Python
Python常见字典内建函数用法示例
May 14 Python
在双python下设置python3为默认的方法
Oct 31 Python
Python 运行.py文件和交互式运行代码的区别详解
Jul 02 Python
Python一行代码解决矩阵旋转的问题
Nov 30 Python
Windows下实现将Pascal VOC转化为TFRecords
Feb 17 Python
Selenium自动化测试工具使用方法汇总
Jun 12 Python
Python2手动安装更新pip过程实例解析
Jul 16 Python
Python如何读写CSV文件
Aug 13 Python
教你用Python写一个植物大战僵尸小游戏
Apr 25 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函数篇之掌握ord()与chr()函数应用
2011/12/05 PHP
PHP父类调用子类方法的代码例子
2014/04/09 PHP
thinkphp中html:list标签传递多个参数实例
2014/10/30 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
2016/10/25 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
jquery中获取id值方法小结
2013/09/22 Javascript
实例详解Nodejs 保存 payload 发送过来的文件
2016/01/14 NodeJs
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
详解JavaScript异步编程中jQuery的promise对象的作用
2016/05/03 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
vue.js中v-on:textInput无法执行事件问题的解决过程
2017/07/12 Javascript
JavaScript使用Ajax上传文件的示例代码
2017/08/10 Javascript
React操作真实DOM实现动态吸底部的示例
2017/10/23 Javascript
vue项目中使用百度地图的方法
2018/06/08 Javascript
5分钟快速掌握JS中var、let和const的异同
2018/09/19 Javascript
微信小程序 多行文本显示...+显示更多按钮和收起更多按钮功能
2019/09/26 Javascript
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
在unittest中使用 logging 模块记录测试数据的方法
2018/11/30 Python
Python GUI编程完整示例
2019/04/04 Python
python gdal安装与简单使用
2019/08/01 Python
PyTorch加载自己的数据集实例详解
2020/03/18 Python
Selenium 滚动页面至元素可见的方法
2020/03/18 Python
python 画图 图例自由定义方式
2020/04/17 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
2021/03/03 Python
波兰在线运动商店:YesSport
2020/07/23 全球购物
销售人员中英文自荐信
2013/09/22 职场文书
网络宣传方案
2014/03/15 职场文书
励志演讲稿800字
2014/08/21 职场文书
学习党代会心得体会
2014/09/05 职场文书
2014领导班子四风剖析对照检查材料思想汇报
2014/09/20 职场文书
反对四风问题自我剖析材料
2014/09/29 职场文书
考试作弊检讨书1000字(5篇)
2014/10/19 职场文书
2014最新预备党员思想汇报范文:中国梦,我的梦
2014/10/25 职场文书
2016参观监狱警示教育活动心得体会
2016/01/15 职场文书
Java面试题冲刺第十七天--基础篇3
2021/08/07 面试题