如何 ping 特定端口并报告结果?

3 python bots ping server discord

我正在为我的朋友们制作一个不和谐的机器人。!status 这一功能旨在对服务器执行 ping 操作并报告回复。

    from tcping import Ping
    if message.content.startswith('!status'):
        ping = Ping('HOST', 25565)
        response = ping.ping(1)
        await message.channel.send(str(response))
Run Code Online (Sandbox Code Playgroud)

问题是,机器人只回复“无”。有什么帮助吗?

Jor*_*ley 5

我猜你想看看是否有可用的东西(而不是 ping)...如果这是真的,这可能对你有用...

import socket

def check(host,port,timeout=2):
    sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #presumably 
    sock.settimeout(timeout)
    try:
       sock.connect((host,port))
    except:
       return False
    else:
       sock.close()
       return True

print(check('google.com',1234,timeout=1))
print(check('google.com',443,timeout=1))
Run Code Online (Sandbox Code Playgroud)

也许你想计时...很简单

import time
def timed_check(host,port,timeout=2):
    t0 = time.time()
    if check(host,port,timeout):
       return time.time()-t0 # a bit inexact but close enough

print(timed_check('google.com',1234,timeout=1))
print(timed_check('google.com',443,timeout=1))
Run Code Online (Sandbox Code Playgroud)

或者也许你想要统计数据

def timed_stats_check(host,port,timeout=2,retries=5): 
    minimum,maximum,sumation = float('inf'),float('-inf'),0
    errors = 0
    for i in range(retries):
        t = timed_check(host,port,timeout)
        if t is None:
           print("ERROR Unreachable...")
           errors += 1
        else:
            print(f"Time {t:0.5f}s")
            maximum = max(maximum,t)
            minimum = min(minimum,t)
            sumation += t
    if retries > 0:
        print(f"Max Time: {maximum:0.5f}s")
        print(f"Min Time: {minimum:0.5f}s")
        print(f"Average: {sumation/(retries-errors):0.2f}s")
    print(f"Failures: {errors}/{retries}")
Run Code Online (Sandbox Code Playgroud)