各位用户为了找寻关于Python扫描IP段查看指定端口是否开放的方法的资料费劲了很多周折。这里教程网为您整理了关于Python扫描IP段查看指定端口是否开放的方法的相关资料,仅供查阅,以下为您介绍关于Python扫描IP段查看指定端口是否开放的方法的详细内容
本文实例讲述了Python扫描IP段查看指定端口是否开放的方法。分享给大家供大家参考。具体实现方法如下:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83#!/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:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62#!/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程序设计有所帮助。