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中文竖排显示的方法
Jul 28 Python
Django内容增加富文本功能的实例
Oct 17 Python
Python lambda函数基本用法实例分析
Mar 16 Python
使用python存储网页上的图片实例
May 22 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
Jul 25 Python
使用python去除图片白色像素的实例
Dec 12 Python
Win系统PyQt5安装和使用教程
Dec 25 Python
Django Model中字段(field)的各种选项说明
May 19 Python
python使用隐式循环快速求和的实现示例
Sep 11 Python
Python爬虫之Selenium警告框(弹窗)处理
Dec 04 Python
地图可视化神器kepler.gl python接口的使用方法
Dec 22 Python
Python数据分析之pandas读取数据
Jun 02 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的开发框架的现状和展望
2007/03/16 PHP
PHP 上传文件的方法(类)
2009/07/30 PHP
用PHP将网址字符串转换成超链接(网址或email)
2010/05/25 PHP
ThinkPHP中I(),U(),$this-&gt;post()等函数用法
2014/11/22 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
Js的MessageBox
2006/12/03 Javascript
JavaScript入门学习书籍推荐
2008/06/12 Javascript
javascript 可以拖动的DIV(二)
2009/06/26 Javascript
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
javascript中[]和{}对象使用介绍
2013/03/20 Javascript
给js文件传参数(详解)
2014/07/13 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
如何使用Bootstrap创建表单
2017/03/29 Javascript
Express框架之connect-flash详解
2017/05/31 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
浅谈PDF.js使用心得
2018/06/07 Javascript
js中Object.defineProperty()方法的不详解
2018/07/09 Javascript
简单了解TypeScript中如何继承 Error 类
2019/06/21 Javascript
layui原生表单验证的实例
2019/09/09 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
微信跳一跳辅助python代码实现
2018/01/05 Python
django 取消csrf限制的实例
2020/03/13 Python
Python如何在windows环境安装pip及rarfile
2020/06/15 Python
搭建pypi私有仓库实现过程详解
2020/11/25 Python
HTML5学习笔记之History API
2015/02/26 HTML / CSS
Vince官网:全球著名设计师品牌,休闲而优雅的服饰
2017/01/15 全球购物
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
编程实现去掉XML的重复结点
2014/05/28 面试题
优秀实习自我鉴定
2013/12/04 职场文书
基层党组织公开承诺书
2014/03/28 职场文书
2015年禁毒工作总结
2015/04/30 职场文书
电影小兵张嘎观后感
2015/06/03 职场文书
安全知识竞赛主持词
2015/06/30 职场文书
MySQL数据库完全卸载的方法
2022/03/03 MySQL
CentOS7设置ssh服务以及端口修改方式
2022/12/24 Servers