Python扫描IP段查看指定端口是否开放的方法


Posted in Python onJune 09, 2015

本文实例讲述了Python扫描IP段查看指定端口是否开放的方法。分享给大家供大家参考。具体实现方法如下:

#!/usr/local/bin/python
#-*- coding: UTF-8 -*-
####################################################################
##################################################
#BLOG:http://hi.baidu.com/alalmn
# Python 扫描IP段 指定端口是否开放
##################################################
import socket
import threading,time
socket.setdefaulttimeout(10) #设置了全局默认超时时间
#查看IP端口是否开放
class socket_port(threading.Thread):
  def __init__(self,cond, name):
    super(socket_port, self).__init__()
    self.cond = cond
    self.cond.set()#将标识位设为Ture
    self.HOST = name
  def run(self):
    #time.sleep(1) #确保先运行Seeker中的方法
    try:
      PORT=21
      s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      s.connect((self.HOST,PORT))
      print""
      print self.HOST,u":",PORT,u"端口开放"
      #self.cond.wait()#堵塞线程,直到Event对象内部标识位被设为True或超时(如果提供了参数timeout)。
      self.cond.set()#将标识位设为Ture
      return 1
    except:
      print ".",
      #print self.HOST,u":",PORT,u"端口未开放"
      #self.cond.wait()#堵塞线程,直到Event对象内部标识位被设为True或超时(如果提供了参数timeout)。
      self.cond.set()#将标识位设为Ture
    return 0
##
#socket_port("192.168.2.1")
#if socket_port("192.168.2.100"):
#  print "开放"
#else:
#  print "未开放"
def ip2num(ip):
  ip = [int(x) for x in ip.split('.')]
  return ip[0]<<24 | ip[1]<<16 | ip[2]<<8 | ip[3]
def num2ip(num):
  #time.sleep(0.05) #50ms
  #time.sleep(0.1) #s
#  data='%s.%s.%s.%s' % ( (num & 0xff000000) >> 24,
#                 (num & 0x00ff0000) >> 16,
#                 (num & 0x0000ff00) >> 8,
#                 num & 0x000000ff )
#  #socket_port(data) #查看IP端口是否开放
  if num>=IPend:
    print u"IP导入数组完成"
  return '%s.%s.%s.%s' % ( (num & 0xff000000) >> 24,
               (num & 0x00ff0000) >> 16,
               (num & 0x0000ff00) >> 8,
               num & 0x000000ff )
def gen_ip(ip1,ip2): #返回数组
#  ip
#  global IPend
#  start, IPend = [ip2num(x) for x in ip.split('-')]
  global IPend
  IPend=ip2
  return [num2ip(num) for num in range(ip1,ip2+1) if num & 0xff]
import ini
if __name__=='__main__':
  ini.ini_get() #读取INI
  list_ip=gen_ip(ip2num(ini.IP1),ip2num(ini.IP2))
  I1 = 0 #得到list的第一个元素
  print u"开始扫描IP"
  ip=0
  while I1 < len(list_ip):
    #print list_ip[I1]
    time.sleep(0.3) #确保先运行Seeker中的方法
    cond = threading.Event()
    hider = socket_port(cond,list_ip[I1])
    hider.start()
    if ip>=255:
      ini.ini_write(list_ip[I1],ini.IP2) #修改INI
      print ip
      ip=0
    ip=ip+1
    I1 = I1 + 1  #一层

ini.py:

#!/usr/local/bin/python
#-*- coding: UTF-8 -*-
##################################################
#qq:316118740
#BLOG:http://hi.baidu.com/alalmn
# Python 操作ini文件
# 刚学写的不好请大家见谅
##################################################
IP1="" #扫描IP
IP2=""  #当前已经扫到的IP
INITXT="IP.ini" #INI文件名字
import ConfigParser
def ini_get(): #读取INI
  try:
    global IP1
    global IP2
    global INITXT
    config = ConfigParser.ConfigParser()
    config.readfp(open(INITXT))
    IP1 = config.get("ipdata","ip1")
    IP2 = config.get("ipdata","ip2")
  except:
    print "读取INI错误"
    ini_add("","") #写入INI
 
def ini_add(ip1,ip2): #写入INI
  try:
    global INITXT
    config = ConfigParser.ConfigParser()
    config.add_section("ipdata")# 设置section段及对应的值
    config.set("ipdata","ip1",ip1)
    config.set("ipdata","ip2",ip2)
    config.write(open(INITXT, "w"))# 写入文件
  except:
    print "写入INI错误"
def ini_write(ip1,ip2): #修改INI
  try:
    global INITXT
    config = ConfigParser.ConfigParser()
    config.read(INITXT)
    if not config.has_section("ipdata"):#看是否存在该Section,不存在则创建
      temp = config.add_section("")
    config.set("ipdata","ip1",ip1)
    config.set("ipdata","ip2",ip2)
    config.write(open(INITXT, "r+"))
  except:
    print "修改INI错误"
    ini_add("","") #写入INI
#if __name__=='__main__':
##  ini_get() #读取INI
##  print IP1
##  print IP2
#
##  ini_add("222222222","3333333333333") #写入INI
##  ini_get() #读取INI
##  print IP1
##  print IP2
#
#  ini_write("999999999","0000000000") #修改INI
#  ini_get() #读取INI
#  print IP1
#  print IP2

运行:

python TCP21.py

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
Aug 22 Python
python连接MySQL数据库实例分析
May 12 Python
Python图像灰度变换及图像数组操作
Jan 27 Python
centos6.8安装python3.7无法import _ssl的解决方法
Sep 17 Python
python 一个figure上显示多个图像的实例
Jul 08 Python
如何利用Python模拟GitHub登录详解
Jul 15 Python
django 2.2和mysql使用的常见问题
Jul 18 Python
Python 实现文件读写、坐标寻址、查找替换功能
Sep 11 Python
python数据化运营的重要意义
Nov 25 Python
Python Django form 组件动态从数据库取choices数据实例
May 19 Python
Python 创建TCP服务器的方法
Jul 28 Python
Python+Pillow+Pytesseract实现验证码识别
May 11 Python
Python实现数据库编程方法详解
Jun 09 #Python
Python读写文件方法总结
Jun 09 #Python
六个窍门助你提高Python运行效率
Jun 09 #Python
python数组复制拷贝的实现方法
Jun 09 #Python
Python函数返回值实例分析
Jun 08 #Python
python下MySQLdb用法实例分析
Jun 08 #Python
Python赋值语句后逗号的作用分析
Jun 08 #Python
You might like
推荐十款免费 WordPress 插件
2015/03/24 PHP
php生出随机字符串
2017/07/06 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
2017/10/12 PHP
javascript中的数字与字符串相加实例分析
2011/08/14 Javascript
JQuery获取文本框中字符长度的代码
2011/09/29 Javascript
jQuery EasyUI API 中文文档 - ComboBox组合框
2011/10/07 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
2015/05/03 Javascript
使用AJAX实现Web页面进度条的实例分享
2016/05/06 Javascript
javascript事件处理模型实例说明
2016/05/31 Javascript
jQuery插件ajaxFileUpload使用实例解析
2016/10/19 Javascript
javascript实现动态显示颜色块的报表效果
2017/04/10 Javascript
vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
2017/10/21 Javascript
vue element table 表格请求后台排序的方法
2018/09/28 Javascript
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
浅谈JS for循环中使用break和continue的区别
2020/07/21 Javascript
javascript中闭包closure的深入讲解
2021/03/03 Javascript
[01:12:08]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.24
2019/09/10 DOTA
Python实现的十进制小数与二进制小数相互转换功能
2017/10/12 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
2018/02/01 Python
Linux下Python安装完成后使用pip命令的详细教程
2018/11/22 Python
PyTorch中反卷积的用法详解
2019/12/30 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
2020/06/30 Python
python从PDF中提取数据的示例
2020/10/30 Python
Window10上Tensorflow的安装(CPU和GPU版本)
2020/12/15 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
使用OpenCV实现人脸图像卡通化的示例代码
2021/01/15 Python
python中pdb模块实例用法
2021/01/15 Python
Lenox官网:精美的瓷器&独特的礼品
2017/02/12 全球购物
全球销量第一生发产品:Viviscal
2017/12/21 全球购物
北京天润融通.net面试题笔试题
2012/02/20 面试题
食品营养与检测应届生求职信
2013/11/08 职场文书
药学专业大专生的自我评价
2013/12/12 职场文书
初中学生评语大全
2014/04/24 职场文书
运动会开幕词
2015/01/28 职场文书
基于angular实现树形二级表格
2021/10/16 Javascript