繁体   English   中英

Pythonanywhere - ping:套接字:不允许操作

[英]Pythonanywhere - ping: socket: Operation not permitted

请帮忙。 我有一个电报机器人,当我从 Bash 控制台启动他时,每 60 秒 ping static IP - 它工作正常,但每天停止工作一次。 我尝试使用 Always on task 但在日志文件中收到“ping: socket: Operation not permitted”。 我有 5 美元的帐户,我该怎么办?

从 Bash 控制台运行时我看到了什么:

--- 176.102.48.100 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms PING 176.102.48.100 (176.102.48.100) 56(84) bytes of data. 
--- 176.102.48.100 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms PING 176.102.48.100 (176.102.48.100) 56(84) bytes of data. --- 176.102.48.100 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms

我在 Always On 任务日志中看到的内容:

2023-01-12 08:55:34 - Task preparing to start 
Jan 12 09:00:58 ping: socket: Operation not permitted 
Jan 12 09:01:58 ping: socket: Operation not permitted 
Jan 12 09:02:58 ping: socket: Operation not permitted 
Jan 12 09:03:58 ping: socket: Operation not permitted 
Jan 12 09:04:58 ping: socket: Operation not permitted

我的 Ping 脚本

    def check_ip_available() -> bool:
    hostname = "IP HERE"
    response = os.system("ping -c 1 " + hostname)
    if response == 0:
        return True

    return False

我可以解决这个问题吗? 谢谢

我尝试了两种方式来启动我的机器人,但它只能从 Bash 控制台运行。 但是控制台每 24 小时重置一次,我需要 Always On Task

您遇到的问题似乎与通过 Always On Task 运行脚本时的用户权限有关。 错误消息“ping: socket: Operation not permitted”表示脚本没有打开套接字和发送 ping 请求所需的权限。

解决此问题的一种方法是使用 sudo 命令以超级用户 (root) 身份运行脚本。 但是,不建议这样做,因为它可能存在安全风险。

另一种选择是更改脚本以使用不需要原始套接字访问的替代库。 您可以使用的库之一是 ping3,它是 ping 命令的纯 Python3 实现。

您可以通过运行以下命令来安装它:

pip install ping3

然后,您可以在脚本中使用ping3库中的ping() function,如下所示:

from ping3 import ping

hostname = "IP HERE"
response = ping(hostname)
if response is not None:
    return True
else:
    return False

还值得检查在 Always On Task 中运行脚本的用户。 确保用户具有运行脚本所需的权限。

请注意,此解决方案适用于 Linux/Unix 系统,对于 Windows,您可能需要使用不同的库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM