【问题标题】:limit nested for loop output限制嵌套for循环输出
【发布时间】:2015-08-13 20:44:50
【问题描述】:

我正在运行以下代码以获取安全组列表,并且我得到了预期的行为,但我正在尝试查看是否有办法制作此代码,以便输出仅与源一起吐出入站规则一次...所以对于名为“wordpress-app-SG”的安全组,输出如下所示

SecurityGroup:wordpress-app-SG sg-99c4befc inbound: [IPPermissions:tcp(22-22)]  source: [67.184.225.222/32]
SecurityGroup:wordpress-app-SG sg-99c4befc inbound: [IPPermissions:tcp(80-80)]  source: [24.12.30.198/32]
SecurityGroup:wordpress-app-SG sg-99c4befc inbound: [IPPermissions:udp(53-53)]  source: [24.12.30.198/32]

这是我目前正在使用的...

SecurityGroup:default sg-e1304484 inbound: [IPPermissions:-1(None-None), IPPermissions:tcp(5500-5500)]  source: [67.184.225.222/32]
SecurityGroup:default sg-e1304484 inbound: [IPPermissions:-1(None-None), IPPermissions:tcp(5500-5500)]  source: [67.184.225.222/32]
SecurityGroup:Pub_HDP_SG sg-e632d982 inbound: [IPPermissions:-1(None-None)]  source: [0.0.0.0/0]
SecurityGroup:RDP Rule - open everyone  sg-42d58d27 inbound: [IPPermissions:-1(None-None)]  source: [0.0.0.0/0]
SecurityGroup:us-east-open-all sg-97ffa7f2 inbound: [IPPermissions:tcp(22-22), IPPermissions:tcp(53-53)]  source: [10.0.1.2/32]
SecurityGroup:us-east-open-all sg-97ffa7f2 inbound: [IPPermissions:tcp(22-22), IPPermissions:tcp(53-53)]  source: [10.0.1.2/32]
SecurityGroup:wordpress-app-SG sg-99c4befc inbound: [IPPermissions:tcp(22-22), IPPermissions:tcp(80-80), IPPermissions:udp(53-53)]  source: [67.184.225.222/32]
SecurityGroup:wordpress-app-SG sg-99c4befc inbound: [IPPermissions:tcp(22-22), IPPermissions:tcp(80-80), IPPermissions:udp(53-53)]  source: [24.12.30.198/32]
SecurityGroup:wordpress-app-SG sg-99c4befc inbound: [IPPermissions:tcp(22-22), IPPermissions:tcp(80-80), IPPermissions:udp(53-53)]  source: [24.12.30.198/32]
SecurityGroup:default sg-c65a20a3 inbound: [IPPermissions:-1(None-None), IPPermissions:-1(None-None)]  source: [sg-c65a20a3-995635159130]
SecurityGroup:default sg-c65a20a3 inbound: [IPPermissions:-1(None-None), IPPermissions:-1(None-None)]  source: [sg-99c4befc-995635159130]
SecurityGroup:AWS-AMI-SG sg-35568d51 inbound: [IPPermissions:tcp(22-22)]  source: [0.0.0.0/0]
SecurityGroup:launch-wizard-2 sg-932255f6 inbound: [IPPermissions:tcp(22-22), IPPermissions:tcp(443-443)]  source: [10.0.1.2/32]
SecurityGroup:launch-wizard-2 sg-932255f6 inbound: [IPPermissions:tcp(22-22), IPPermissions:tcp(443-443)]  source: [0.0.0.0/0]
>>> 

【问题讨论】:

  • 您能否更清楚地表达您的问题?是否有您想要的特定安全组 ID?
  • 顺便说一句,这段代码效率很低,很容易被破解。您应该调用 get_all_security_groups() 一次,并且只调用一次。将结果存储在一个变量中,然后将该变量用于后续的 len() 或其他操作。
  • @jarmod,谢谢你的指点。我对编程很陌生,所以我只是想学习

标签: python amazon-web-services boto aws-sdk


【解决方案1】:

试试这样的:

import boto.ec2

sgs = boto.ec2.connect_to_region('us-east-1').get_all_security_groups()

for sg in sgs:
    for rule in sg.rules:
        print sg, sg.id, "inbound:", rule, " source:", rule.grants

【讨论】:

    【解决方案2】:

    我确信这不是最好的方法,但这是我想出的……这几乎和我正在寻找的一样

    for i in range(ln):
        sg = ec2.get_all_security_groups()[i]
        ru_ln = len(ec2.get_all_security_groups()[i].rules)
        print "\n"
        print "######################", sg, sg.id, "######################"
        print "\n"
        for g in range(ru_ln):
            so = ec2.get_all_security_groups()[i].rules[g].grants
            sg2 = ec2.get_all_security_groups()[i].rules[g]
            print "inbound:", sg2, "source:", so
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-04
      • 2019-07-12
      • 1970-01-01
      • 2020-04-18
      • 2013-10-17
      • 1970-01-01
      相关资源
      最近更新 更多