이 글에서는 9개의 연속 유휴 포트를 찾는 Python 방법을 주로 소개합니다. 관심 있는 친구는
1. 프로젝트 요구 사항을 참조하세요. >특정 소프트웨어를 설치할 때 구성 중에 사용 가능한 포트를 채워야 합니다. 5개 플랫폼 중 특정 포트가 점유되어 있는지 확인
5개 플랫폼은 windows,linux
, aix, hp, Solaris의 두 가지 유형입니다. 1. s.connect( (ip, int(port))) 성공하면 포트가 점유되어 있다는 의미입니다.
그렇지 않으면 연결에 실패하면 Except가 들어가는데 이는 포트가 점유되지 않았다는 의미입니다.그런데 문제가 있습니다. "127.0.0.1"과 "0.0.0.0" 외에 포트 모니터링 IP가 222.25.136.17과 같은 기기의 LAN IP이거나 통신하는 기기의 IP일 수도 있습니다. 그것으로.
이 방법으로 LAN IP를 얻을 수 있습니다
def isInuse(ipList, port): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) flag=True for ip in ipList: try: s.connect((ip, int(port))) s.shutdown(2) print '%d is inuse' % port flag=True break except: print '%d is free' % port flag=False return flag
def getLocalIp(): localIP = socket.gethostbyname(socket.gethostname()) return localIP
2. netstat 출력 정보를 사용하여 일치하는 포트 번호 찾기
** Linux에서 netstat -tnpl을 사용하여 포트 모니터링 정보를 얻으세요.
tcp 0 0 10.173.1.208:3210 0.0 관찰 .0.0 ; *.
import sys import os import socket def isInuse(ipList, port): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) flag=True for ip in ipList: try: s.connect((ip, int(port))) s.shutdown(2) print '%d is inuse' % port flag=True break except: print '%d is free' % port flag=False return flag def getLocalIp(): localIP = socket.gethostbyname(socket.gethostname()) return localIP def checkNinePort(startPort): flag = True ipList = ("127.0.0.1","0.0.0.0",getLocalIp()) for i in range(1, 10): if (isInuse(ipList, startPort)): flag = False break else: startPort = startPort + 1 return flag, startPort def findPort(startPort): while True: flag, endPort = checkNinePort(startPort) if (flag == True): #ninePort is ok break else: startPort = endPort + 1 return startPort def main(): startPort=51988 # startPort = int(sys.argv[1]) print findPort(startPort) main()
기능을 호출하십시오
연속 포트를 알고 싶다면 하나의 포트가 점유되어 있는 한 ,
netstat - tnpl | grep 321 tcp 0 0 10.173.1.208:3211 0.0.0.0:* LISTEN 55563/*** tcp 0 0 0.0.0.0:3212 0.0.0.0:* LISTEN 55586/*** tcp 0 0 10.173.1.208:3213 0.0.0.0:* LISTEN 55707/*** tcp 0 0 0.0.0.0:3214 0.0.0.0:* LISTEN 54272/java tcp 0 0 0.0.0.0:3215 0.0.0.0:* LISTEN 54272/java tcp 0 0 10.173.1.208:3216 0.0.0.0:* LISTEN 54822/*** tcp 0 0 10.173.1.208:3217 0.0.0.0:* LISTEN 34959/*** tcp 0 0 10.173.1.208:3218 0.0.0.0:* LISTEN 54849/***
os.popen()
시스템의 일부 쉘 명령 호출 가능
os.popen().readlines()
셸 명령 호출 후 에코 정보 읽기
위 내용은 Python을 사용하여 9개의 연속 유휴 포트 찾기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!author = 'I316736'
import os
import platform
import sys
def isInuseWindow(port):
if os.popen('netstat -an | findstr :' + str(port)).readlines():
portIsUse = True
print '%d is inuse' % port
else:
portIsUse = False
print '%d is free' % port
return portIsUse
def isInuseLinux(port):
#lsof -i:4906
#not show pid to avoid complex
if os.popen('netstat -na | grep :' + str(port)).readlines():
portIsUse = True
print '%d is inuse' % port
else:
portIsUse = False
print '%d is free' % port
return portIsUse
def isInuseAix(port):
if os.popen('netstat -Aan | grep "\.' + str(port) + ' "').readlines():
portIsUse = True
print '%d is inuse' % port
else:
portIsUse = False
print '%d is free' % port
return portIsUse
def isInuseHp(port):
if os.popen('netstat -an | grep "\.' + str(port) + ' "').readlines():
portIsUse = True
print '%d is inuse' % port
else:
portIsUse = False
print '%d is free' % port
return portIsUse
def isInuseSun(port):
if os.popen('netstat -an | grep "\.' + str(port) + ' "').readlines():
portIsUse = True
print '%d is inuse' % port
else:
portIsUse = False
print '%d is free' % port
return portIsUse
def choosePlatform():
#'Windows-7-6.1.7601-SP1'
#'AIX-1-00F739CE4C00-powerpc-32bit'
#'HP-UX-B.11.31-ia64-32bit'
#'Linux-3.0.101-0.35-default-x86_64-with-SuSE-11-x86_64'
#'SunOS-5.10-sun4u-sparc-32bit-ELF'
machine = platform.platform().lower()
if 'windows-' in machine:
return isInuseWindow
elif 'linux-' in machine:
return isInuseLinux
elif 'aix-' in machine:
return isInuseAix
elif 'hp-' in machine:
return isInuseHp
elif 'sunos-' in machine:
return isInuseSun
else:
print 'Error, sorry, platform is unknown'
exit(-1)
def checkNinePort(startPort):
isInuseFun = choosePlatform()
nineIsFree = True
for i in range(1, 10):
if (isInuseFun(startPort)):
nineIsFree = False
break
else:
startPort = startPort + 1
return nineIsFree, startPort
def findPort(startPort):
while True:
flag, endPort = checkNinePort(startPort)
if (flag == True): # ninePort is ok
break
else:
startPort = endPort + 1
return startPort
def main(startPort):
firstPort=findPort(startPort)
print 'First port of nine free ports is ', firstPort
if name == 'main' :
if len(sys.argv) > 1:
print len(sys.argv)
startPort = int(sys.argv[1])
else:
startPort = 500
main(startPort)