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解析发往本机的数据包示例 (解析数据包)
Jan 16 Python
python对字典进行排序实例
Sep 25 Python
Python中的包和模块实例
Nov 22 Python
Python中尝试多线程编程的一个简明例子
Apr 07 Python
Python编写生成验证码的脚本的教程
May 04 Python
Python使用内置json模块解析json格式数据的方法
Jul 20 Python
python文本数据相似度的度量
Mar 12 Python
python3.5绘制随机漫步图
Aug 27 Python
Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事项
Nov 30 Python
Python调用Windows命令打印文件
Feb 07 Python
python中的random模块和相关函数详解
Apr 22 Python
python 单机五子棋对战游戏
Apr 28 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
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
2015/03/27 PHP
PHP CodeIgniter框架的工作原理研究
2015/03/30 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
PHP实现一个轻量级容器的方法
2019/01/28 PHP
XAMPP升级PHP版本实现步骤解析
2020/09/04 PHP
JavaScript 特殊字符
2007/04/05 Javascript
javascript 当前日期加(天、周、月、年)
2009/08/09 Javascript
理解JSON:3分钟课程
2011/10/28 Javascript
基于jQuery判断两个元素是否有重叠部分的代码
2012/07/25 Javascript
javascript 中String.match()与RegExp.exec()的区别说明
2013/01/10 Javascript
JS运动特效之同时运动实现方法分析
2018/01/24 Javascript
vue实现点击展开点击收起效果
2018/04/27 Javascript
基于Vue实现可以拖拽的树形表格实例详解
2018/10/18 Javascript
vue-cli3跨域配置的简单方法
2019/09/06 Javascript
Nuxt页面级缓存的实现
2020/03/09 Javascript
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
[00:32]2018DOTA2亚洲邀请赛OpTic出场
2018/04/03 DOTA
Python中join和split用法实例
2015/04/14 Python
Python 迭代器与生成器实例详解
2017/05/18 Python
Python 中判断列表是否为空的方法
2019/11/24 Python
PyTorch中的C++扩展实现
2020/04/02 Python
python爬虫今日热榜数据到txt文件的源码
2021/02/23 Python
美国美发品牌:Bumble and Bumble
2016/10/08 全球购物
俄罗斯建筑和装饰材料在线商店:Stroilandia
2020/07/25 全球购物
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
大学生毕业求职简历的自我评价
2013/10/24 职场文书
品管员岗位职责
2013/11/10 职场文书
高校辅导员推荐信范文
2013/12/25 职场文书
房产转让协议书
2014/04/11 职场文书
三月法制宣传月活动总结
2014/07/03 职场文书
2014年民警工作总结
2014/11/25 职场文书
2014财务部年度工作总结
2014/12/08 职场文书
挂职个人工作总结
2015/03/05 职场文书
WINDOWS下安装mysql 8.x 的方法图文教程
2022/04/19 MySQL