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常用列表数据结构小结
Aug 06 Python
Python3字符串学习教程
Aug 20 Python
python实现机械分词之逆向最大匹配算法代码示例
Dec 13 Python
python3使用scrapy生成csv文件代码示例
Dec 28 Python
pyqt5与matplotlib的完美结合实例
Jun 21 Python
将Pytorch模型从CPU转换成GPU的实现方法
Aug 19 Python
python 协程中的迭代器,生成器原理及应用实例详解
Oct 28 Python
使用Pandas将inf, nan转化成特定的值
Dec 19 Python
Python unittest单元测试openpyxl实现过程解析
May 27 Python
python和go语言的区别是什么
Jul 20 Python
Python爬取网页信息的示例
Sep 24 Python
教你使用Python获取QQ音乐某个歌手的歌单
Apr 03 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版(4)
2006/10/09 PHP
PHP 编程请选择正确的文本编辑软件
2006/12/21 PHP
php用数组返回无限分类的列表数据的代码
2010/08/08 PHP
PHP中使用正则表达式提取中文实现笔记
2015/01/20 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
2015/06/19 PHP
如何使用纯PHP实现定时器任务(Timer)
2015/07/31 PHP
使用jQuery实现的网页版的个人简历(可换肤)
2013/04/19 Javascript
javascript实现复制与粘贴操作实例
2014/10/16 Javascript
js基础知识(公有方法、私有方法、特权方法)
2015/11/06 Javascript
Bootstrap源码解读下拉菜单(4)
2016/12/23 Javascript
详解JavaScript数组过滤相同元素的5种方法
2017/05/23 Javascript
详谈Node.js之操作文件系统
2017/08/29 Javascript
Windows下使用Nodejs运行js的方法
2017/09/02 NodeJs
原生JS实现DOM加载完成马上执行JS代码的方法
2018/09/07 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
Nodejs中的require函数的具体使用方法
2019/04/02 NodeJs
详解基于原生JS验证表单组件xy-form
2019/08/20 Javascript
一步一步实现Vue的响应式(对象观测)
2019/09/02 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
Python实现七彩蟒蛇绘制实例代码
2018/01/16 Python
python浪漫表白源码
2019/04/05 Python
python文本数据处理学习笔记详解
2019/06/17 Python
html5视频常用API接口的实战示例
2020/03/20 HTML / CSS
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
英国香水店:The Perfume Shop
2017/03/27 全球购物
吉尔德利巧克力公司:Ghirardelli Chocolate Company
2019/03/27 全球购物
生物科学专业个人求职信范文
2013/12/05 职场文书
军训生自我鉴定范文
2013/12/27 职场文书
关于元旦的广播稿
2014/02/16 职场文书
弘扬民族精神演讲稿
2014/05/07 职场文书
个人买房协议书范本
2014/10/06 职场文书
2014年大学班长工作总结
2014/11/14 职场文书
同学聚会通知短信
2015/04/20 职场文书
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript
mysql幻读详解实例以及解决办法
2022/06/16 MySQL