从 Azure 功能 Ping 服务器

Ped*_*C88 2 c# ping access-denied azure-functions

我有以下 Azure 函数因访问被拒绝而失败 (忽略逻辑很奇怪的事实,我只是在做第一次测试)

public static void Run(TimerInfo myTimer, ILogger log)
{
    List<string> servers = new List<string>()
    {
        "server1"
    };

    foreach(string server in servers)
    {
        if (!Ping(server))
        {
            SendEmail($"Server {server} seems down.", log);
        }
    }
}

static bool Ping(string hostName)
{
    Ping pingSender = new Ping();
    int timeout = 120;
    PingReply reply = pingSender.Send(hostName, timeout);
    return reply.Status == IPStatus.Success;
}

static void SendEmail(string message, ILogger log)
{
    log.LogInformation(message);
}
Run Code Online (Sandbox Code Playgroud)

如果我改变线条

PingReply reply = pingSender.Send(hostName, timeout);
return reply.Status == IPStatus.Success;
Run Code Online (Sandbox Code Playgroud)

要return true;进行测试的目的,功能运行良好。

我需要配置什么才能使该函数执行 ping 操作?

Hur*_*hen 5

据我所知,我们无法在 Azure 函数中成功执行 ping 操作,因为 Azure 中不允许使用 ICMP 协议。但是我们可以在里面做tcpping。您可以在 Azure 函数控制台中进行测试(如下图所示):

在此处输入图片说明 我们也可以安装一些工具来做ping操作,比如PsPing、Nmap或者Telnet。

这是更新:

根据一些研究,我认为 Azure Function 可以满足您的要求。

首先,我们应该安装psping。可以在这个页面下载:https : //docs.microsoft.com/zh-cn/sysinternals/downloads/psping#installation

然后解压 psping 文件并在 Azure 函数中打开 Kudu。

在此处输入图片说明

然后单击“调试控制台”-->“CMD”-->“站点”,新建一个名为“工具”的文件夹,单击“工具”并将您的psping文件(PSTools)拖到“工具”文件夹中。

之后,请参考我在下面发布的代码

在此处输入图片说明

如果 ping 成功,我的代码中的变量“err”将不显示任何内容。如果 ping 失败,它将显示错误。所以你可以根据它来判断成功。

在此处输入图片说明