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画ROC曲线和AUC值计算
Sep 19 Python
python+pyqt实现12306图片验证效果
Oct 25 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
Feb 01 Python
如何用python写一个简单的词法分析器
Dec 18 Python
python3的print()函数的用法图文讲解
Jul 16 Python
Python 3 判断2个字典相同
Aug 06 Python
Python数据可视化:箱线图多种库画法
Nov 06 Python
python实例化对象的具体方法
Jun 17 Python
Python爬虫教程知识点总结
Oct 19 Python
DRF使用simple JWT身份验证的实现
Jan 14 Python
Python数据清洗工具之Numpy的基本操作
Apr 22 Python
浅谈Python中的正则表达式
Jun 28 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短址转换实现方法
2015/02/25 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
2015/06/17 PHP
[原创]php实现子字符串位置相互对调互换的方法
2016/06/02 PHP
php进行ip地址掩码运算处理的方法
2016/07/11 PHP
PHP实现的微信公众号扫码模拟登录功能示例
2019/05/30 PHP
javascript 带有滚动条的表格,标题固定,带排序功能.
2009/11/13 Javascript
JQuery中的ready函数冲突的解决方法
2010/05/17 Javascript
php上传图片并给图片打上透明水印的代码
2010/06/07 Javascript
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
js判断背景图片是否加载成功使用img的width实现
2013/05/29 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
javascript中2个感叹号的用法实例详解
2014/09/04 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
JS实现不规则TAB选项卡效果代码
2015/09/16 Javascript
AngularJS 作用域详解及示例代码
2016/08/17 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
2017/04/01 Javascript
p5.js入门教程之键盘交互
2018/03/19 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
[01:56]2014DOTA2西雅图邀请赛 MVP外卡赛老队长精辟点评
2014/07/09 DOTA
python实现文件分组复制到不同目录的例子
2014/06/04 Python
Python随机读取文件实现实例
2017/05/25 Python
Python编程中NotImplementedError的使用方法
2018/04/21 Python
python3实现猜数字游戏
2020/12/07 Python
Python 函数绘图及函数图像微分与积分
2019/11/20 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
2020/07/02 Python
python 录制系统声音的示例
2020/12/21 Python
HTML5拖拽文件上传的示例代码
2021/03/04 HTML / CSS
巴西手表购物网站:eclock
2019/03/19 全球购物
网吧消防安全制度
2014/01/28 职场文书
幸福家庭事迹材料
2014/02/03 职场文书
计算机通信专业推荐信
2014/02/22 职场文书
根叔历年演讲稿
2014/05/20 职场文书
工程承诺书怎么写
2014/05/24 职场文书
2014年作风建设剖析材料
2014/10/23 职场文书
校长新学期致辞
2015/07/30 职场文书
解决Mysql多行子查询的使用及空值问题
2022/01/22 MySQL