如何有效地将巨大的参数传递给函数?

问题描述 投票:0回答:1

谢谢您的阅读。请原谅我的英语,我是法语。 这是合理的吗?

我的功能的目的是通过Python3中的multi 处理/线程不要,我见过,不要!)扫描许多IPv4:PORT,发送SYN并注册任何结果。之所以在此处调用多对象,是因为等待任何可能的答复都需要超时。所以。

此功能称为生产者。它将潜在的TCP连接存储到数据库中。 消费者然后读取数据库并独立进行一些测试。所以。

我准备了一个IPv4列表。这是由10个K元素组成的随机有效IP列表。请记住,我们有65K端口可以测试每个IPv4。

然后,我的方法是为每个启动的生产者使用新的种子来填充列表端口。我有许多。每个端口都有一个有效的IPv4列表,但是,如果我们考虑65K端口和100K IP,则需要传递6.5G元素。

为什么?

通过构造,

IP[]random.shuffle() -likePorts[]也是。

如果我读了p in Ports,并且对于每个p,请加入IPv4:Ports并附加到params[]中,则可以通过scan(u) for u in params[]启动parallelized作业>>

我像这样通过run(rounds)启动它:

def run(rounds):
   for r in rounds:
      scan(r)

但是问题是size(rounds) =size(params)〜6.5G元素

我找不到有效的方法来将如此大的参数(大列表)传递给并行作业。我的内存不足。

我不是问如何在具有惊人思维能力的工作站上对其进行管理,尽管在纸上设计了此功能,但它不适合raspi2(

1GB mem

)。我完全不需要Python3,它是一种教学产品。因此,我被卡住了。

我的问题是:您能帮助我找到一种有效的方法来通过并行化函数来攻击庞大列表的方法,该函数弹出列表而不通过参数发送它吗?

我用谷歌搜索,关注了我所知道的论坛和话题,但是,当我重构程序时,不断的问题依然存在,嘲笑我,位于

main()

的同一位置。我不想复制的内容:

MAX_IPV4 = i.IPv4Address._ALL_ONES MAX_PORT = 65535 def r_ipv4(): while True: a=i.IPv4Address._string_from_ip_int(r.randint(0, MAX_IPV4)) b=i.IPv4Address(a) if b.is_multicast or b.is_private or b.is_loopback or b.is_reserved or b.is_link_local : continue else : return a break def generate_target(): return r_ipv4() def generate_r_targets(n): ip=[] for i in range(0,n): ip.append(generate_target()) ports=[] for p in range(1,65535): ports.append(p) r.shuffle(ports) targets=[] for p in ports: for z in ip: targets.append((str(z)+","+str(p)))

这不是我的最佳方法,但是我最多可以解释和显示问题的方式。

我不想失去(可重复使用的端口)迭代,这是我的主要载体,而且是核心。我正在测试敲的动态配置。

说。 Computer_one敲入一个序列。Computer_one是唯一知道种子的人。种子是敲键序列中的键,完成了。

谢谢您的阅读。请原谅我的英语,我是法语。这有道理吗?我功能的目的是通过...

python-3.x security networking out-of-memory knockd
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.