使用Python识别侦听端口

Mal*_*rus 6 python sockets ports

在从bash翻译一些脚本时,我遇到了netstat -an的许多用法,以查找我们的某个服务是否在监听.虽然我知道我可以使用subprocess.call或其他甚至popen我宁愿使用pythonic解决方案,所以我没有利用我们正在运行的unix环境.

从我读到的插座模块应该有一些东西,但我还没有看到任何检查侦听端口.可能是我不理解一个简单的技巧,但到目前为止我知道如何连接到套接字,并写一些让我知道该连接失败的东西.但不一定我找到了专门检查端口的东西,看它是否正在收听.

有任何想法吗?

sbe*_*rry 10

怎么样试图连接......

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = s.connect_ex(('127.0.0.1', 3306))

if result == 0:
    print('socket is open')
s.close()
Run Code Online (Sandbox Code Playgroud)


A. *_*Ite 5

我知道这个问题很旧,但是我是为初学者写的。如果要标识系统上的侦听端口,可以使用以下代码。

from socket import *

Port = 0 #First port.
while Port <= 65535: #Port 65535 is last port you can access.
    try:
        try:
            Socket = socket(AF_INET, SOCK_STREAM, 0) #Create a socket.
        except:
            print("Error: Can't open socket!\n")    
            break #If can't open socket, exit the loop.
        Socket.connect(("127.0.0.1", Port)) #Try connect the port. If port is not listening, throws ConnectionRefusedError. 
        Connected = True
    except ConnectionRefusedError:
        Connected = False       
    finally:
        if(Connected and Port != Socket.getsockname()[1]): #If connected,
            print("{}:{} Open \n".format("127.0.0.1", Port)) #print port.
        Port = Port + 1 #Increase port.
        Socket.close() #Close socket.
Run Code Online (Sandbox Code Playgroud)