【问题标题】:How to get list of Endpoint Statistics and Dangerous Endpoints by using of Azure Mgmt SDK fluent如何使用 Azure Mgmt SDK fluent 获取端点统计信息和危险端点列表
【发布时间】:2020-08-05 06:31:10
【问题描述】:

我正在使用https://www.nuget.org/packages/Microsoft.Azure.Management.Fluent 以编程方式(C#.NET-Core Web 应用程序)在 Azure 中获取资源,并尝试通过提供如下服务主体(CS)来获取资源信息...

 string subscriptionId = "xxx";
            string clientId = "xxx";
            string tenantId = "xxx";
            string clientSecret = "xxx";

            AzureCredentials cred = new AzureCredentialsFactory()
                .FromServicePrincipal(
                clientId,
                clientSecret,
                tenantId,
                AzureEnvironment.AzureGlobalCloud
                );

            var azure = Azure.Configure()
                             .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
                             .Authenticate(cred)
                             .WithSubscription(subscriptionId);

任何示例代码(C#.NET-Core Web 应用程序),以找出 端点统计信息(遍历 NSG 中的开放端口并详细列出它们)和 危险端点 (遍历 NSG 中的开放端口并识别 3389/22 等端口)。

请提供以上建议。

谢谢

【问题讨论】:

  • 请提供您尝试过的代码。
  • foreach (var nsg in azure.NetworkSecurityGroups.List()) { foreach (var nic in nsg.NetworkInterfaceIds) { try { // 如何查找端点统计信息(循环通过 NSG 中的开放端口并详细列出它们) //and Dangerous Endpoints } catch { } } }
  • @AnirbanGoswami,只是想确认一下,您想列出 NSG 中的所有端口 -> 入站安全规则?

标签: c# azure .net-core azure-management-api


【解决方案1】:

如果您的意思是列出 NSG 中的所有端口 -> 入站安全规则,如下图所示:

然后你可以使用如下代码:

        foreach (var nsg in azure.NetworkSecurityGroups.List())
        {
            
            var rules = nsg.SecurityRules;

            foreach (var r in rules)
            {
                Console.WriteLine($"*** the NSG: {r.Value.Name} ***");

                if (r.Value.DestinationPortRange != null)
                {
                    //after you get the port, you can apply your logic here.
                    Console.WriteLine(r.Value.DestinationPortRange);
                }

                if (r.Value.DestinationPortRanges != null)
                {
                    foreach (var port in r.Value.DestinationPortRanges)
                    {
                        //after you get the port, you can apply your logic here.
                        Console.WriteLine(port);
                    }
                }
                Console.WriteLine("**end**");
            }
          }

【讨论】:

    【解决方案2】:

    感谢@ivan Yang 的回复和帮助...

    以下是工作代码,我根据我的修改了 urs 代码

     var ntwrrkDetails = new List<EndTcpPorts>();  
    
       EndTcpPorts objEndTcpPorts; // cls object
    
      foreach (var nsg in azure.NetworkSecurityGroups.List())
                    {
                        objEndTcpPorts = new EndTcpPorts();
                        objEndTcpPorts.ResourceGroup = nsg.ResourceGroupName.ToString();
    
                        try
                        {
                            var rules = nsg.SecurityRules;
                            foreach (var r in rules)
                            {
                                try
                                {
                                    objEndTcpPorts.NSGName = r.Value.Name.ToString();
                                }
                                catch (Exception)
                                {
                                    objEndTcpPorts.NSGName = "";
                                }
                                if (r.Value.DestinationPortRanges != null)
                                {
                                    try
                                    {
                                        //get ports
                                        objEndTcpPorts.TcpPorts = r.Value.DestinationPortRange.ToString(); //((Microsoft.Azure.Management.ResourceManager.Fluent.Core.IndexableWrapper<Microsoft.Azure.Management.Network.Fluent.Models.SecurityRuleInner>)r.Value).Inner.Protocol.Value.ToString();
                                    }
                                    catch (Exception)
                                    {
    
                                        objEndTcpPorts.TcpPorts = "";
                                    }
                                }
    
                            }
                        }
                        catch (Exception)
                        {
                            continue;
                        }
                        
                        ntwrrkDetails.Add(objEndTcpPorts); // add to list
                    }
    

    现在我们可以将 tcp 端口中的(危险端点)检查为 NSG 中的开放端口,并识别 3389/22 或 *..等端口。

    非常感谢,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-13
      • 2021-07-29
      • 1970-01-01
      • 2017-02-05
      相关资源
      最近更新 更多