有需要可以看看,闲着无聊写的
import os, sys, pickle
import threading
import pexpect
import re
import logging
import socket
linkServerIpList = []
linkServerNameList = []
portList = []
#获取所有的服务器IP和名字列表
def getServerIpByReadFiles (targetPath):
serverIpList = []
serverNameList = []
if os.path.isfile(targetPath):
with open(targetPath, 'r+') as fd:
while True:
read_info = fd.readline()
print(read_info)
if len(read_info) > 0:
serverIp = re.search(r"(\d*?)\.(\d*?)\.(\d*?)\.(\d+)", read_info).group().strip()
serverName = re.search(r'[a-z]{5,7}', read_info).group().strip()
serverIpList.append(serverIp)
serverNameList.append(serverName)
else:
print("读取服务器IP和名字完毕!")
break
return (serverIpList, serverNameList)
#将所有服务器IP和名字写入文件
def ip_Name_File(serverIpList, serverNameList):
print(serverIpList)
print(len(serverIpList))
openfile = open('.iplist.temp', 'w')
for index in range(len(serverIpList)):
openfile.write(serverIpList[index] + ':' + serverNameList[index] + '\n')
print("文件写入成功!")
openfile.close()
#获取tcp服务器的IP列表
def commonTcpProbeServer (serverIpList, serverNameList, port):
clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#clientSocket.settimeout(2)
clientSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
clientSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
num = 0
for index, serverIp in enumerate(serverIpList):
try:
print('Check: ' + serverIp + ' : ' + str(port))
clientSocket.connect((serverIp, port))
#if clientSocket.connect_ex((serverIp, port)) != 0:
# print(r)
# continue
clientSocket.send("hello".encode("gb2312"))
print('send success')
recvdata = clientSocket.recv(2048)
if len(recvdata):
print("recvData from server ip: %s :架构:%s" % (serverIp, recvdata.decode("gb2312")))
else:
print('recv data error')
continue
if len(linkServerIpList) > 0:
for i in range(len(linkServerIpList)):
if serverIp == linkServerIpList[i]:
continue
else:
num += 1
if num == len(linkServerIpList):
linkServerIpList.append(serverIp)
linkServerNameList.append(serverNameList[index])
else:
linkServerIpList.append(serverIp)
linkServerNameList.append(serverNameList[index])
tmpPort = recvdata.decode("gb2312") + ':' + serverIp + ':' + str(port)
portList.append(tmpPort)
clientSocket.close()
break
except Exception as e:
print(e)
continue
#将当前可TCP连接的服务器IP写入相应文档
def writeTCPServerLog():
print("TCP Server can connect include %s" %linkServerIpList)
with open('.tcpserver.temp', 'w') as openfd:
for index in range(len(linkServerIpList)):
openfd.write("<option>" + linkServerIpList[index] + "</option>")
def writeSystemLog():
with open('.sys.temp', 'w') as fd:
for index in range(len(portList)):
fd.write('<option value="0">' + portList[index] + '</option>' + '\n')
#遍历所有可以tcp连接的server
def viewLinkServerIpList():
flags = False
if len(linkServerIpList):
for index, serverIp in enumerate(linkServerIpList):
print("Server: %s can be connected!" %serverIp)
for attr in portList:
print('The port can use:' + str(attr))
return len(linkServerIpList)
else:
print("No server can be connected!")
return flags
if __name__ == "__main__":
'''
default ip list path.
'''
targetPath = os.getcwd() + '/' + 'iplist.cfg'
iplist, namelist = getServerIpByReadFiles(targetPath)
ip_Name_File(iplist, namelist)
for i in range(20001, 20030):
commonTcpProbeServer(iplist, namelist, i)
if viewLinkServerIpList() is False:
sys.exit(1)
writeTCPServerLog()
writeSystemLog()
print('client exit')
sys.exit(0)