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 相关文章推荐
wxPython使用系统剪切板的方法
Jun 16 Python
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
Oct 13 Python
Python编程实现线性回归和批量梯度下降法代码实例
Jan 04 Python
python实现简单神经网络算法
Mar 10 Python
python 3.7.0 安装配置方法图文教程
Aug 27 Python
python实现汉诺塔算法
Mar 01 Python
python3 实现一行输入,空格隔开的示例
Nov 14 Python
10招!看骨灰级Pythoner玩转Python的方法
Apr 15 Python
对Python中TKinter模块中的Label组件实例详解
Jun 14 Python
python经典趣味24点游戏程序设计
Jul 26 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
Oct 23 Python
Python常用配置文件ini、json、yaml读写总结
Jul 09 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
php实现的简单压缩英文字符串的代码
2008/04/24 PHP
php实现Mongodb自定义方式生成自增ID的方法
2015/03/23 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
Aster vs KG BO3 第一场2.19
2021/03/10 DOTA
jquery中的 $(&quot;#jb51&quot;)与document.getElementById(&quot;jb51&quot;) 的区别
2011/07/26 Javascript
利用jquery的获取JS文件中的字符串内容
2012/02/14 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
2013/08/18 Javascript
深入理解JavaScript系列(26):设计模式之构造函数模式详解
2015/03/03 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
2015/08/25 Javascript
jQuery实现鼠标滑过点击事件音效试听
2015/08/31 Javascript
JavaScript中instanceof运算符的使用示例
2016/06/08 Javascript
js 动态添加元素(div、li、img等)及设置属性的方法
2016/07/19 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
2018/04/23 Javascript
koa-router源码学习小结
2018/09/07 Javascript
vue+axios实现文件下载及vue中使用axios的实例
2018/09/21 Javascript
详解在React-Native中持久化redux数据
2019/05/22 Javascript
对pandas的dataframe绘图并保存的实现方法
2017/08/05 Python
详解Tensorflow数据读取有三种方式(next_batch)
2018/02/01 Python
python读取图片并修改格式与大小的方法
2018/07/24 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
2019/06/21 Python
浅谈Python3多线程之间的执行顺序问题
2020/05/02 Python
实例讲解Python 迭代器与生成器
2020/07/08 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
2021/03/03 Python
Hudson Jeans官网:高级精制牛仔裤
2018/11/28 全球购物
巴黎欧莱雅法国官网:L’Oreal Paris
2019/04/30 全球购物
授权委托书范本
2014/04/03 职场文书
《山谷中的谜底》教学反思
2014/04/26 职场文书
工商干部先进事迹
2014/05/14 职场文书
新学期标语
2014/06/30 职场文书
施工单位安全责任书
2014/07/24 职场文书
钓鱼岛事件感想
2015/08/11 职场文书
2016年6月份红领巾广播稿
2015/12/21 职场文书
vue实现移动端div拖动效果
2022/03/03 Vue.js
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技
MySQL实现用逗号进行拼接、以逗号进行分割
2022/12/24 MySQL