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实现问号表达式(?)的方法
Nov 27 Python
python异步任务队列示例
Apr 01 Python
Linux环境下MySQL-python安装过程分享
Feb 02 Python
Python-嵌套列表list的全面解析
Jun 08 Python
详解Python中的动态属性和特性
Apr 07 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
Aug 22 Python
PyTorch之图像和Tensor填充的实例
Aug 18 Python
django框架单表操作之增删改实例分析
Dec 16 Python
将python文件打包exe独立运行程序方法详解
Feb 12 Python
python保留格式汇总各部门excel内容的实现思路
Jun 01 Python
Python基于template实现字符串替换
Nov 27 Python
Python正则表达式中flags参数的实例详解
Apr 01 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
破解图片防盗链的代码(asp/php)测试通过
2010/07/02 PHP
PHP中限制IP段访问、禁止IP提交表单的代码
2011/04/23 PHP
PHP系列学习之日期函数使用介绍
2012/08/18 PHP
php表单敏感字符过滤类
2014/12/08 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
2016/11/25 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
javascript scrollTop正解使用方法
2013/11/14 Javascript
jQuery拖拽 &amp; 弹出层 介绍与示例
2013/12/27 Javascript
JavaScript异步回调的Promise模式封装实例
2014/06/07 Javascript
jQuery+HTML5美女瀑布流布局实现方法
2015/09/21 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
js实现一键复制功能
2017/03/16 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
nodejs log4js 使用详解
2019/05/31 NodeJs
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
微信小程序静默登录的实现代码
2020/01/08 Javascript
JS前端基于canvas给图片添加水印
2020/11/11 Javascript
Vue开发中常见的套路和技巧总结
2020/11/24 Vue.js
javascript实现倒计时提示框
2021/03/02 Javascript
使用k8s部署Django项目的方法步骤
2019/01/14 Python
Python字典遍历操作实例小结
2019/03/05 Python
python如何构建mock接口服务
2021/01/28 Python
详解css3使用transform出现字体模糊的解决办法
2020/10/16 HTML / CSS
蔻驰美国官网:COACH美国
2016/08/18 全球购物
美国南部最大的家族百货公司:Belk
2017/01/30 全球购物
MIRTA官网:手工包,100%意大利制造
2020/02/11 全球购物
创建学习型党组织实施方案
2014/03/29 职场文书
初中家长寄语
2014/04/02 职场文书
装修活动策划方案
2014/08/27 职场文书
2015年青年志愿者协会工作总结
2015/04/27 职场文书
2016年村党支部公开承诺书
2016/03/24 职场文书
golang 实现对Map进行键值自定义排序
2021/04/28 Golang