我正在使用基于Elixir的网络扫描程序。 我的目标是能够在代理(简单)中存储IP地址列表,并在该代理上循环工作人员,以便他们获取列表头并启动扫描/探测功能(并不那么容易)。虽然这可能听起来像某种理论的东西,但我可以提供代码片段,如果它有帮助。循环工人通过基于代理的IP地址列表
编辑︰显然我设法弄清楚如何做到这一点(我想这是怎么会这样做)。
defmodule Find3r.Worker do
use GenServer
require Logger
def start_link, do: GenServer.start_link(__MODULE__, :ok, name: :worker)
def init(:ok) do
Logger.debug("Worker activated.")
{:ok, :ok}
end
def scan_range(range), do: GenServer.call(__MODULE__, {:scan_range, range})
def handle_call({:scan_range, range}, _from, :ok) do
Logger.debug("Scanning #{range}")
{:ok, pid} = Agent.start(Find3r.Utils, :addresses_for, [range])
Agent.get_and_update(pid, fn(state) -> foo(state) end) |> loop(pid)
{:reply, :ok, :ok}
end
# Avoids an exception when the Agent runs out of addresses
defp foo([ip|rest]), do: {ip, rest}
defp foo(_), do: {[], []}
defp loop(ip, pid) when is_tuple(ip) do
spawn(Find3r.Utils, :scan, [ip])
Agent.get_and_update(pid, fn(state) -> foo(state) end) |> loop(pid)
end
defp loop(_, _), do: nil
end
该项目已移至GitHub。
再次感谢O/
请你提供的代码片段,并尝试你的问题归结到一些非常具体的 - 这样它更容易写一个有用的答案 –
的问题很简单:我不知道如何使有限数量的的工作人员(例如[这里](https://git.yt/AnneGwenn/Find3r/src/master/lib/find3r/worker.ex))将清单的头部传递给Find3r。 Utils.scan/1'函数并将尾部返回存储IP地址列表的代理。 – Uniaika
请在问题中发布代码,并尝试使问题自成一体,而无需关注外部链接,阅读评论等 –