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 正则式使用心得
May 07 Python
python根据距离和时长计算配速示例
Feb 16 Python
python的re模块应用实例
Sep 26 Python
Python实现list反转实例汇总
Nov 11 Python
python深度优先搜索和广度优先搜索
Feb 07 Python
Python使用googletrans报错的解决方法
Sep 25 Python
python 实现图片旋转 上下左右 180度旋转的示例
Jan 24 Python
在pytorch中为Module和Tensor指定GPU的例子
Aug 19 Python
python调用接口的4种方式代码实例
Nov 19 Python
python 装饰器功能与用法案例详解
Mar 06 Python
Python通过fnmatch模块实现文件名匹配
Sep 30 Python
python处理json数据文件
Apr 11 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源码之 ext/mysql扩展部分
2009/07/17 PHP
PHP CURL获取返回值的方法
2014/05/04 PHP
php集成环境xampp中apache无法启动问题解决方案
2014/11/18 PHP
鼠标滚轮控制网页横向移动实现思路
2013/03/22 Javascript
如何让页面加载完成后执行js
2013/06/26 Javascript
基于jquery的9行js轻松实现tab控件示例
2013/10/12 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
2016/06/06 Javascript
jQuery实现的自定义弹出层效果实例详解
2016/09/04 Javascript
Sequelize中用group by进行分组聚合查询
2016/12/12 Javascript
Bootstrap Table快速完美搭建后台管理系统
2017/09/20 Javascript
webpack配置之后端渲染详解
2017/10/26 Javascript
js 获取json数组里面数组的长度实例
2017/10/31 Javascript
nodejs实现简单的gulp打包
2017/12/21 NodeJs
JS点击动态添加标签、删除指定标签的代码
2018/04/18 Javascript
原生js添加一个或多个类名的方法分析
2019/07/30 Javascript
layui的select联动实现代码
2019/09/28 Javascript
JavaScript修改注册表实例代码
2020/01/05 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
JavaScript数组排序的六种常见算法总结
2020/08/18 Javascript
微信小程序picker组件两列关联使用方式
2020/10/27 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访-EG篇
2018/04/03 DOTA
下载安装setuptool和pip linux安装pip    
2014/01/24 Python
python数据清洗系列之字符串处理详解
2017/02/12 Python
python实现zabbix发送短信脚本
2018/09/17 Python
Windows下安装Scrapy
2018/10/17 Python
Python3如何在服务器打印资产信息
2020/08/27 Python
HTML5 常见面试题之PC端和移动端区别介绍
2018/01/22 HTML / CSS
德国知名健康零食网上商店:Seeberger
2017/07/27 全球购物
护理职业应聘自荐书
2013/09/29 职场文书
出国留学介绍信
2014/01/13 职场文书
广告传媒专业应届生求职信
2014/03/01 职场文书
预防煤气中毒方案
2014/06/16 职场文书
小学庆六一活动总结
2014/08/28 职场文书
师范生见习报告范文
2014/11/03 职场文书
《检阅》教学反思
2016/02/22 职场文书