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求pi的方法
Oct 08 Python
Python批量按比例缩小图片脚本分享
May 21 Python
将Python的Django框架与认证系统整合的方法
Jul 24 Python
Python中操作mysql的pymysql模块详解
Sep 13 Python
Python基于matplotlib实现绘制三维图形功能示例
Jan 18 Python
Jupyter notebook远程访问服务器的方法
May 24 Python
Python考拉兹猜想输出序列代码实践
Jul 05 Python
Python循环中else,break和continue的用法实例详解
Jul 11 Python
python 判断字符串中是否含有汉字或非汉字的实例
Jul 15 Python
Python实现搜索算法的实例代码
Jan 02 Python
python实现删除列表中某个元素的3种方法
Jan 15 Python
Python使用BeautifulSoup4修改网页内容
May 20 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 执行系统外部命令 system() exec() passthru()
2009/08/11 PHP
php在文件指定行中写入代码的方法
2012/05/23 PHP
三种php连接access数据库方法
2013/11/11 PHP
PHP AjaxForm提交图片上传并显示图片源码
2016/11/29 PHP
启用OPCache提高PHP程序性能的方法
2019/03/21 PHP
代码生成器 document.write()
2007/04/15 Javascript
如何快速的呈现我们的网页的技巧整理
2007/07/01 Javascript
使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体
2013/01/15 Javascript
JavaScript在XHTML中的用法详解
2013/04/11 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
JavaScript程序员应该知道的45个实用技巧
2014/03/04 Javascript
Javascript缓存API
2016/06/14 Javascript
微信小程序 PHP后端form表单提交实例详解
2017/01/12 Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
2017/03/02 Javascript
js + css实现标签内容切换功能(实例讲解)
2017/10/09 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
2019/11/08 Javascript
浅谈javascript如何获取文件后缀名
2020/08/07 Javascript
vue实现登录功能
2020/12/31 Vue.js
[06:42]DOTA2每周TOP10 精彩击杀集锦vol.1
2014/06/25 DOTA
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
2018/05/21 Python
Python实现压缩文件夹与解压缩zip文件的方法
2018/09/01 Python
Python打包方法Pyinstaller的使用
2018/10/09 Python
将Python字符串生成PDF的实例代码详解
2019/05/17 Python
Python装饰器原理与基本用法分析
2020/01/07 Python
python2.7使用scapy发送syn实例
2020/05/05 Python
HTML5中的进度条progress元素简介及兼容性处理
2016/06/02 HTML / CSS
前端实现背景虚化但内容清晰且自适应 的实例代码
2019/08/01 HTML / CSS
阿里云:Aliyun.com
2017/02/15 全球购物
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
2014/12/30 面试题
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
购房委托书范本
2014/09/18 职场文书
英文产品推荐信
2015/03/27 职场文书
湘江北去观后感
2015/06/15 职场文书