65.9K
CodeProject 正在变化。 阅读更多。
Home

IP Radar 2 - 实时检测和防御。

starIconstarIconstarIconstarIconstarIcon

5.00/5 (28投票s)

2020年5月25日

CPOL

26分钟阅读

viewsIcon

55763

downloadIcon

2030

保护您的隐私免受恶意网络活动和策略违规的侵害。

适用于 Linux: (注意:使用开源免费的 folium 包代替 Google 地图)

适用于 Windows: (警告:Google 地图的开发 API 不再免费!)

引言

随着在线数据监控、用户活动追踪和用户画像分析的不断升级,在线数据安全和用户隐私面临的威胁持续困扰着我们大多数“普通”用户。但是,当最广泛的工具似乎都无法实现这一目标时,我们能做些什么来保护我们的隐私吗?答案是“能”。

以下视频启发了我,让我尝试做出贡献

ProtonMail,8:50起

经过数月辛勤工作,成果就是下面展示的Windows 应用程序一个真正有效的解决方案!
……老实说,它确实运行得很好!
……而且是免费的。

IP Radar 2 - 基于主机地理位置等的实时入侵检测和防御

IP Radar 2 – 主窗口

IDPS,“入侵检测与防御系统”的缩写,通常是一种复杂的软件工具,大多数普通用户并不拥有。我们最常用的是一些防火墙和杀毒软件提供的功能,但这些工具通常不会根据远程主机的地理位置等有用标准进行检测。因此,IDPS 是一个必要且有意义的补充,也适用于家庭使用。

IP Radar 2,是我很久以前创建的另一个工具(*)的变体,旨在弥补标准用户可用的典型网络安全工具之间的一些空白。主要目标是为任何人提供一个完全开源且轻量级的 IDPS 工具。

(*) 由于我的电脑每天都受到来自俄罗斯和其他国家的攻击,出于绝望,我创建了一个网络入侵检测系统 (NIDS),我称之为IP Radar。那个工具确实帮助我发现了攻击者并最终摆脱了他们。

简而言之

与之前用 Java 编程并使用 OpenGL 的“ monolithic(单片)”工具相比,这个用 Python 编程的新“ lightweight(轻量级)”工具将部分基于浏览器并利用 Google Maps API,它本来是开源和免费的……至少我是这么认为的。

很快,我发现自2018年7月16日起,Google 地图提供了基于使用量的定价模式。在开始研究替代方案之前,我发现“仅供开发目的”的 Google 地图 API 变体仍具有足够的功能来涵盖我设想的主要功能。

这个免费的 API (2024年2月6日更新:该API现在需要付费!)相当不稳定,有烦人的水印,并且功能非常受限。然而,在使用它几个月后,我习惯了它,并且觉得它确实相当不错。此外,将来将 API 移植到其他替代方案也不会是什么大问题。

与最初的 IP Radar 相同,我再次使用了tshark,一个出色的免费开源数据包分析器。在我看来,这是在故障排除、通信协议分析和开发方面事实上的标准工具。

为此,这次我使用了pyshark,一个 tshark 的 python 包装器,它被证明具有非常好的性能。

但 IP Radar 到 IP Radar 2 的主要变化是从 IDS 过渡到 IDPS,更侧重于“防御”恶意网络活动,如信息窃取、数据泄露、恶意广告和远程访问工具。

为什么选择 Python?

在玩“机器学习”时首次接触python后,我意识到这种编程语言(“人工智能”领域的事实标准编程语言)拥有庞大的贡献社区,提供大量的开源代码和库,并且它已成为世界上主流的编程语言之一。

话虽如此,经过一番相当痛苦的学习阶段,并习惯了 Python 编程语言的所有细节之后,我发现了它作为一种高度可扩展脚本语言的能力。

随着复杂性的增加和可用时间的减少,快速组装事物并尽可能少地重复使用代码的需求成为主要目标之一。Python 通常在需要性能的情况下巧妙地使用“幕后”的 C 代码,同时提供一个简单且通用的“前端”。

极限编程

在此,我必须提醒,本文提供的代码

  • 是由一个时间非常稀缺的“新手”Python 程序员编写的
  • “刻意”遵循一种非常直接的编程方式,优先考虑简单性和时间而非形式主义(“极限编程”)。

尽管如此,这种迭代方法在功能和稳定性方面取得了相当不错的结果,同时坚持了一个粗略的架构。

这解释了,例如,许多随意甚至不正确的函数和变量名。对此表示歉意。

不过,我希望你能忽略那些不美观的部分,并从其余部分中获益。

我肯定会在某个时候上传一个改进版本。但如果有人拥有必要的技能和时间,愿意基于此代码创建一个开源项目,那么我很乐意成为贡献者,请联系我。

主要特点

在使用 IP Radar 浏览互联网时,这个工具在地图上显示了我的计算机连接到的主机的地理位置。我很快意识到,我的大多数“正常”网络流量主要位于欧洲和美国。可疑或异常的网络活动与位于俄罗斯、乌克兰、以色列、马来西亚(还是泰国?)等其他国家的主机相关联,这只是举几个例子!

是的,那真是一段旅程。我的电脑被滥用,成为欧洲僵尸网络的一部分。

通过了解主机所在位置,我可以轻松区分敌友,这最终帮助我解决了问题。

IP Radar 的继任者 IP Radar 2 的主要功能如下。

map

这是 IP Radar 2 的主要功能之一。也就是说,使用 Google 地图在世界地图上可视化网络活动。输出文件 map.html 在捕获时定期生成,或者在从捕获文件离线读取时仅生成一次。

标记显示主机的地理位置,连接标记的线条表示网络流量交换(例如,TCP 或 UDP 数据包)。

不同的颜色和形状代表网络流量的不同特征,例如,对于标记、连接

  • 红色,红色:“坏”主机 – 来自配置为非法的地点
  • 粉色,黑色:到该主机的连接“已终止”
  • 橙色,橙色:“未解析”的主机名
  • 标记中缺少圆点,黄色:对“ping”命令无响应
  • 蓝色,蓝色:“本地”网络中的主机
  • 绿色,矢车菊蓝:“良好”主机

标记的高度与“发送”到该主机的流量量成正比。这有助于轻松识别“信息泄露”。

粗连接表示当前“已建立”的连接。

箭头显示流量方向。

大西洋中部的信息标记显示当前的节点数量和其他信息。

地图背景可以从这些选项中选择:ROADMAP(路线图)、TERRAIN(地形)、SATELLITE(卫星)、HYBRID(混合)。

主窗口

主窗口包含所有已知节点(主机)的列表,并用相应的颜色标记。此列表提供了许多额外信息,例如从该主机接收和传输的字节数。

通过点击列表元素,附加信息会以更易读的形式显示在侧面板中。该信息可以复制粘贴。

Filter

主窗口还包含许多根据不同标准“过滤”地图上显示信息的功能。过滤器的更改会重新生成 map.html,从而可以快速轻松地关注特定节点。

例如,当从下拉框中选择“Amazon”或“Microsoft”时,只会显示属于这些公司的节点。下拉框会自动填充在捕获会话期间检测到的所有者。

这应该能让你很好地了解这些公司对我们……或者我们的数据付出了多少“关注”!

防火墙

可以随时启用或禁用自动添加防火墙规则以阻止“恶意”主机的功能。

“恶意”主机的定义可以在 config.ini 中设置,也可以在包含相应国家、城市或所有者名称的白名单或黑名单中设置。其他标准,如带宽限制,将来可能会添加。

终止

当前“已建立”的连接可以根据以下标准之一,通过“终止”相应的拥有者进程来中断

  • all
  • 不良的
  • 特定IP

可以从相应的组合框中选择一个特定的 IP,该组合框将交互式地显示具有当前活动连接的主机。

也可以自动终止连接。以下是选项

所有被终止的进程都将显示在主窗口的列表中

Ping

一个组合框提供了当前会话中所有已知的 IP,以便选择一个进行 ping。

然后,可以通过发送 ICMP 回声请求按需 ping 所选 IP。结果会自动在主窗口和地图中更新。响应 ping 请求的主机将在地图上的标记中显示一个点,否则标记将没有点。

Ping 命令选项

  • 10个随机IP
  • 所有已知
  • 所选IP

当请求时,也可以向“所有已知”主机发送 ping。此过程可能需要一些时间,这解释了为什么为此分配一个单独的线程很方便,我们稍后会看到(pingResolver.processingThread())。如果 ping 超时配置为例如 250 毫秒,并且我们有 100 个主机未响应请求,那么完成此命令需要 25 秒。但别担心,这就是我们将一些任务分配给不同线程的原因。在此工具中,出现一些“延迟”结果并在可用时尽快显示是正常的。

为了测试目的,可以 ping 指定数量的随机选择的 IP 地址。

要 ping 的随机 IP 地址数量可以在 config.ini 中配置。

最后,当设置相应选项(复选框自动)时,可以自动向每个新检测到的主机发送 ping。

声音

声音可以随时启用或禁用。该工具在不同情况下播放不同的声音,例如,请求主机解析、ping 请求、ping 失败等。但最重要的是,当检测到“恶意”主机或超过指定传输数据量时,该工具会播放警报。

报表

在捕获会话期间会自动生成三个文件(DATE 是当前日期和时间的占位符,例如 2020_05_22_10_27_11

  • report_DATE.csv
  • out_DATE.txt
  • ips_DATE.txt

第一个文件包含主窗口中主机列表中看到的完全相同的信息。

第二个文件包含可以配置为不同日志记录级别的应用程序输出。

第三个文件包含所有检测到的 IP 地址。此文件或其文本可以直接输入到 ipnetinfo.exe

除了上面列出的文件,我们还有 tshark 的输出文件 log_DATE.pcapng,它可以随时打开以恢复会话,以及 map_DATE.html

存储

为了优化性能,启动时会从 locationsResolved.json 读取在先前会话中解析的主机位置信息,并随每个新位置进行更新。

config.ini

此文件允许设置以下参数

  • INTERFACE(如果留空,默认将选择第一个接口)
  • RUN_AS_ADMIN(设置为 True 以将规则添加到 Windows 防火墙)
  • ADD_FIREWALL_RULE_BLOCK_IP
  • SHELL_TO_FILE(将 shell 日志记录到文件或控制台)
  • CHECK_PERIOD_IN_SEC(线程的轮询周期 – 在完全消费队列后)
  • ROUTER_IP
  • MY_CITY, MY_COUNTRY, MY_LATITUDE, MY_LONGITUDE,..
  • MAP_ZOOM,..
  • USE_WHITE_LIST (True / False)
  • BlackList={
    	"AF":"Afghanistan",
    	...,
    	"UA":"Ukraine"
    	}
  • WhiteList={
    	# "CZ":"Czech Republic", # commented for now..
    	"DE":"Germany",
    	...
    	"US":"United States"
    	}
  • WhiteListNotKill=[ (to avoid killing vital processes by accident!)
    	"svchost.exe",
    	"python.exe",
    	"whosip.exe"
    	]
  • BlackListOwner=[
    	"BAD GUY",
    	"The Hacker"
    	]
  • WhiteListOwner=[
    	"Microsoft",
    	"Google",
    	"Amazon",
    	"ARIN",
    	"RiPE",
    	"LACNIC",
    	"AfriNIC"
    	]
  • BlackListCity=[
    	"Hanoi",
    	"Montreal"
    	]
  • WhiteListCity=[
    	"Centreville",
    	"San Francisco",
    	"Los Angeles"
    	]

性能:UI 响应时间..

对于所有当前功能,该工具显示出卓越的性能。用户可以做很多事情,而不会遇到任何明显的延迟或看到“沙漏”……哦,天哪……我讨厌沙漏! ;-)

内存占用约为 200MB。

CHECK_PERIOD_IN_SEC 设置为 500ms 时,CPU 使用率极低(在稳定条件下低于 0.1%,当出现网络活动高峰并检测到许多新 IP 时,会短时飙升至 10%)。

有些用户可能需要习惯的是需要“刷新”map.html 文件(通过在浏览器中点击重新加载当前页面)才能显示最新信息。作为帮助,显示地图按钮每次都会在您的默认浏览器中打开一个新选项卡。这允许查看会话的进度并应用不同的过滤器进行比较。

在 Firefox 中,还可以添加 Auto Reload Tab 扩展。其他浏览器可能也有类似的附加组件。

状态

在右上角,您会看到状态以“棒状”形式变化,遵循字符序列“/”,“-”,“\”,“|”,周期由CHECK_PERIOD_IN_SEC*2.0定义(主 GUI 的刷新率)。

状态符号的背景在灰色和绿色之间交替。

这显示了应用程序是否正在运行,以及如果正在运行,是否以正确的速度运行。

离线加载文件

该工具还提供加载数据包捕获文件(*.pcapng *.pcap *.cap)以进行离线分析的功能。在加载数据包捕获文件时,主窗口和 map.html 文件将以与实际捕获会话期间相同的方式更新。

打开文件按钮可用于离线打开捕获文件。

架构

生产者-消费者模式

通过这种简单的模式,重复五次,我们可以构建应用程序的主要结构。

每当需要时,我们将使用互斥锁以线程安全的方式访问公共资源。不仅队列本身需要以这种方式保护,后续的数据结构也需要如此,它们充当从单独的工作线程消费数据的临时存储库。在 Python 中,我们为此目的使用Lock

这里,我们看到架构的粗略概述

网络流量捕获开始后,tshark 将开始将新数据包传递给我们的 packet_callback(),在那里我们将立即它们放入 packetQueue。这创建了我们对抗第一个瓶颈的第一个“屏障”。如果 packetQueue 足够大,我们将能够从容不迫地处理数据包。这种短暂喘息的代价是增加了一点延迟,但对于我们的目的来说,这完全可以忽略不计。

生成和消费数据的游戏将持续通过管道中的多个线程和队列,直到所有信息最终被处理。一些任务是并行处理的,这使得不必要地阻塞或延迟事情成为可能。

下一个从 packetQueue 消费数据包的线程是 processor.processingThread(),它反过来触发在后续 4 个线程中进行进一步的数据处理。

这些线程将允许“同时”独立处理

  • ping请求
  • 主机名解析
  • 终止“非法”网络连接的进程所有者
  • 向系统防火墙添加新的阻止规则
  • 更新主窗口
  • 更新地图 (map.html)

processor 线程中,其他工作线程的结果会被检索并存储在 node_dict 中,而 node_dict 又帮助更新主窗口。

node_dict 是一个字典,包含 NodeDataClass 类型的“节点”,该类带有装饰器 @dataclass,允许定义具有特定类型和默认值的“字段”。这对我来说是一个重要的发现,帮助我以一种类似于我使用 C、C++ 和 Java 等其他编程语言的方式工作,同时解决了 Python 中可变对象与不可变对象的问题。

为了便于理解,我认为对本应用程序的主要数据结构有一个概述是个好主意。

class NodeDataClass:
ip: str
mac: str
lat: float
lon: float
lat_plot: float
lon_plot: float
position: int # position in "circle" with center lat, lon
country_iso: str
country_str: str
region: str
city: str
host: str
show_host: bool
whosip: str
host_resolved: bool
ping: bool
bad: bool
killed: bool
killed_process: str
local: bool # local Network? incl. broadcast and multicast
conn_established: bool
tx: int
rx: int
date: str
time: str
comm_partner_list: list
comm_partner_list_killed: list

这个相当“笨重”的类和相应的过度膨胀的对象展示了设计应用程序时所遵循的简化方法。

如此大量的集中信息在处理尽可能少的对象时非常方便。这样做的好处是所有内容都可以非常轻松地保持一致。对于这个小型工具来说,这是一个很好的折衷方案。

最后,对 plotMap() 的调用将重新生成输出文件 map.html,该文件由工具根据 Google MapsAPI 规范自动以 JavaScript 编写。

第七个也是最后一个线程是 mainWindow.updateGui()。这个线程当然会更新我们的 GUI(主窗口),以显示主机名、ping 响应、已终止连接等方面的变化。

使用 7 个线程和 5 个队列可以实现良好的工作负载分配。

序列图

以下图表显示了一个典型场景

在您试图将此图表与代码进行映射而感到困惑之前,请注意,此图表仅旨在描绘使用多个线程的一般思想,而不必完全与实际代码保持一致。然而,一般思想在这两种情况下都应相同,即尽可能不阻塞并并行处理事物。

在上一张图中,可以清楚地看到数据包 A、B、C、D 和 E 安全地存储在队列中,然后在那里耐心等待处理,而不会阻塞 tshark 或丢失。

代码

以下列表显示了最重要的 Python 脚本

  • admin.py
  • badConnectionKiller.py
  • CheckableComboBox.py
  • configuration.py
  • firewallManager.py
  • hostResolver.py
  • IPRadar2.py
  • node.py
  • pingResolver.py
  • processor.py
  • pysharkSniffer.py
  • ui/mainWindow.py

以下是其他重要文件的列表

  • config.ini
  • gen_exe_with_pyinstaller.bat
  • locationsResolved.json
  • map_DATE.html
  • requirements.txt

为了简单起见,我只对我自己耗费了几天甚至几周时间来处理的最重要的“构建场所”提供非常简短的描述。这应该可以防止你掉进同样的陷阱。

如何在 Windows 上以提升权限运行 Python 脚本

如果您始终记住必须以管理员身份运行该工具才能终止某些进程或向 Windows 防火墙添加新规则,那么就没问题。

另一方面,如果您希望应用程序本身在 config.ini 中将 RUN_AS_ADMIN 选项设置为 True 时提醒您,那么您必须点击此链接 → Admin

控制台命令

每当您黔驴技穷,不想重复发明轮子,或者只是找不到所需的 Python 库时,就是时候通过在 Python 代码中执行一些控制台命令,以“老式”方式做事了。

为此,您应参阅subprocess.popen()

通过它,您将能够执行诸如“netstat -ano | findstr \"established\" | findstr..."之类的命令,这些命令将允许您检查活动的 TCP 连接和相应的拥有者进程,您可能需要根据需要终止它们。

同样,您可以执行“taskkill”作为 psutil.Process().kill() 的替代方案,或执行“netsh”以检查现有防火墙规则或添加新的防火墙规则以阻止“恶意”IP。

在这里,您会找到我迄今为止使用过的控制台命令列表。

  • netstat
  • taskkill(终止进程的 subprocess.Popen().kill() 替代方案)
  • netsh advfirewall firewall show rule / add rule
  • 执行 whosip.exe
  • pipreqs(为 .exe 文件生成 Python 依赖列表)
  • tshark(获取可用接口 – pyshark 未提供的功能)

外部工具

执行外部工具与执行任何其他控制台命令(如上所述)没有什么不同。因此,subprocess.Popen() 在这里再次发挥作用。

我不会透露我花了多少时间试图通过不同的方法、不同的 Python 库和变通方法来改进主机名解析。

最后,我发现了Whosip。那真的救了我的命。这个命令行工具可以让你轻松找到关于 IP 地址的所有可用信息。这比只拥有主机名要好得多。

在此,我必须指出,我有时会发现 Whosip 提供的信息与 ipnetinfo.exe 之间存在差异,因此我添加了 ipnetinfo 按钮,以便在需要时进行双重检查。

如果选择了所有选项,此按钮将调用 ipnetinfo.exe,并将文件 ips_DATE.txt 作为输入。否则,仅使用所选主机的 IP 地址。

一些“真实”的代码

这里,您会找到一段真实的代码片段,是随意摘取的,仅作为从未接触过 Python 的读者的一个例子

######################
# ping host IP
######################
def __pingHost(self,  hostIP):
    self.__mutexSolved.acquire()
    try:
        # in cmd console we have > ping -w 200 -l 40 -n 1 hostIP  
        # (warning: here timeout with poram -w is in milliseconds!)
        ###############################
        # response_list = ping(hostIP, timeout=0.2,  size=40, count=1) # timeout in seconds!
        response_list = ping(hostIP, timeout=configuration.PING_TIMEOUT_SEC,  
        size=configuration.PING_SIZE_BYTES, 
        count=configuration.PING_COUNT) # timeout in seconds!
        print(response_list)
        # when the response is "Request timed out.." 
        # then we get rtt_avg_ms = PING_TIMEOUT_SEC (in ms)
        if response_list.rtt_min < configuration.PING_TIMEOUT_SEC:
            print("Ping to IP = ",  hostIP)
            print("rtt_min_ms = ",  response_list.rtt_min_ms)
            print("rtt_avg_ms = ",  response_list.rtt_avg_ms)
            self.__hostPingedList.append(hostIP)
            # check if response is close to timeout and log infos in such a case
            if (configuration.PING_TIMEOUT_SEC - response_list.rtt_max) < 
                  configuration.PING_TIMEOUT_SEC*0.1:
                print("WARNING! ping response close to max. value, rtt_max_ms = ", 
                       response_list.rtt_max_ms)
        else:
            print("Time out in Ping to IP = ",  hostIP)
    except Exception as e:
        print("Exception in __pingHost() = ",  e)
        print("Exception in __pingHost() to IP = ",  hostIP)
    finally:
        self.__mutexSolved.release()
# end of __pingHost()
###############

我希望这段代码能自我解释,您能理解它的作用,并看到 Python 的主要语法规则。

更重要的是,“为什么”我们需要这个函数。这在摘要中解释。

这就是为什么我在这篇文章中如此关注需求、架构、数据模型、动态行为、经验教训等等,而很少提及代码本身的原因。

此外,作为一个汇编、BASIC、C、C++、C#、Java、Python、SciLab-script、VHDL、VBA 等业余程序员,我有时会看到以下这些东西如同噩梦一般

  1. currAbsPath = currAbsPath.replace("\\", "/")
  2. if "b\'" in line: 
    	line = line.replace("b\'", "") # workaround to get rid of..
  3. self.threadForPacketProcessing = threading.Thread(..) # with or without braces 
                        # to have a "blocking" or "non-blocking" thread call.

所以我很高兴这次只关注更抽象的话题。

我仍然是一个充满激情的程序员,但时不时地,我意识到最重要的其实不是代码本身,而是代码背后的东西。我希望您在某种程度上同意我的观点,并与我一起阅读这份关于应用程序的高级描述。

同时,您可以下载代码进行检查和运行(甚至可以生成一个 .exe 文件!)。

我提供了一个 READ_ME.txt,其中包含您需要遵循的步骤。

IDE、工具和库

每当您开始一项新事物,不确定如何去做,使用什么工具,哪种替代方案更适合您的目标时,您就会意识到需要投入大量时间来回答这些问题。

举个例子:我曾发现 PyCharm 是一个很棒的 Python IDE,可以用于“机器学习”方面的工作,但很快我就意识到,如果我想构建 IP Radar 2,这个工具并不适合我。

Eric6:这个 IDE 正是我所需要的!

免费、稳定、最新、功能丰富,结合 PyQt5 可制作 GUI 等。

然而,对于“没有”GUI 的应用程序,我仍然会推荐 PyCharm。Eric6 中我最想念的重要功能是能够一键跳转到代码声明以导航代码。Eric6 不支持此重要功能。

PyQt5:这套跨平台库允许实现高级 API。多年前在 Ubuntu 上使用 Qt(使用 C++)进行了一次不错但艰苦的体验后,我的批评是

  • 环境庞大
  • 主应用程序与 Designer 之间同步困难

在使用集成到 Eric6 的 Pyqt5 时,我没有看到任何上述问题。

pyshark:这是一个 tshark 的 Python 封装器。

tshark:这是一个网络协议分析器。它允许您从实时网络捕获数据包数据,或从以前保存的捕获文件中读取数据包。请注意,tshark 在大部分捕获功能方面调用 dumpcap。另请注意,您需要安装 Npcap

pipreqs:一旦您的 Python 环境中有一组可用的包,并且您希望能够在其他地方安装这些确切版本(否则,由于不兼容,您的工具可能无法工作),您可能需要使用 pipreqs。

为此,我调用 "pipreqs --force ./ --ignore backups" 并得到

requests==2.22.0
pycountry==19.8.18
pywin32==225
getmac==0.8.2
ip2geotools==0.1.5
playsound==1.2.2
psutil==5.6.3
gmplot==1.2.0
pythonping==1.0.8
cx_Freeze==6.1
dataclasses==0.7

为什么不用pip freeze呢?

  • pip freeze 只保存那些在您的环境中通过 pip install 安装的包。
  • pip freeze 会保存环境中的所有包,包括那些您在当前项目中不使用的包(如果您没有 virtualenv)。

pip install:此工具允许您安装或更新 Python 包。另请参阅 pip

摘要

IP Radar 2,顾名思义,在世界地图上显示您的机器正在与之通信的所有 IP 地址。

这种用不同 IP 表示主机的地理方式,类比用于检测飞机的标准雷达,为这个工具命名。

这种类比在考虑到例如雷达能够定位带有“应答器”的飞行物体时仍在继续。这在商业飞机中是常见情况,它们向“二次”雷达识别自身。

但对于军用飞机或走私飞机,由于应答器可能被故意关闭,因此无法通过应答器进行联系。此时,二次雷达就失效了。

在这种情况下,需要一个“初级”雷达,它通过用电磁波照亮大片空间并接收来自该空间内目标反射的波来定位不愿识别自身的飞机。

在 IP Radar 2 中,我们解析主机的地理位置,并向它们发送 ping 请求(ICMP 回显请求)以获取它们的回复,从而能够计算往返时间和数据包丢失统计信息。

有些人说缺乏 ping 回复不一定意味着主机故意隐藏。有些服务器为了保护自己免受拒绝服务攻击而不回复 ping 请求,有些主机只是懒得在 NAT 网关或企业网络后面重定向 ICMP 请求。

不过,在我看来,当一个主机不回复我的 ping 时,总是可疑的。

雷达控制台上飞机的表示可能会显示几个属性,例如高度,通常以海平面以上英尺为单位。类似地,在 IP Radar 2 中,我们显示一些信息,例如传输到特定主机的字节数。这在标记的高度中可见。

所描述的入侵检测和防御技术当然不是对抗恶意网络活动“最强”的,但它们工作良好(*),在复杂性、实时行为和鲁棒性之间提供了良好的折衷。所提议的许多方面在未来都可以改进。

(*) 迄今为止我用这个工具检测到的东西

  • 加密连接到厄瓜多尔一所大学的 Linux 镜像——我当然阻止了它。可能是恶意软件在进行隧道传输?
  • 来自亚马逊、微软和谷歌的永久后台活动。其中一些可以通过停用不必要的 Windows 服务来减少。但大部分仍然是作为 Windows 用户需要承担的负担。
  • 来自保加利亚没有证书的绘图工具。我没有下载。
  • 来自巴黎公司的烦人用户画像广告。
  • 每次我的 WiFi 重新连接时,都会连接到廉价主机服务器。

所有这些都清楚地表明,我的电脑上运行着我不需要且可能有害的软件。我使用过的所有杀毒软件至今都没有检测到它们,但无论它们藏在哪里,都无法再造成任何损害。

在这里,我们看到该工具实际上帮助提高了我的电脑安全性,并且是对杀毒软件和防火墙软件的一个有意义的补充。

经过几周几乎每天都检测到“坏人”之后,现在我可以说我自由了。两个月以来,我只看到漂亮的“绿色”主机(我的防火墙现在有 85 条额外的阻止规则!)。

为什么我们需要像 IP Radar 2 这样的东西?

防火墙和杀毒软件提供网络安全的主要措施。不幸的是,尽管这些工具提供了所有功能,我们的电脑仍然遭受着巨大的漏洞问题。各种漏洞的感染使得这些工具看起来像一块瑞士奶酪。

通过将它们的功能与自定义 IDPS 功能相结合,可以显著提高安全性。

典型捕获会话/用例

所以,我早上早早醒来,一边啜饮咖啡,一边在开始读报纸之前,查看浏览器上的世界地图,看看有没有什么新情况。

这通常只需要几秒钟。如果我只看到绿色气泡和蓝色线条,我就知道我是安全的。

但如果我看到一些红色标记和红色线条,那么我知道可能有些麻烦。

在这种情况下,瞥一眼地图就能让我找到世界某个通常没有活动迹象的偏远角落的潜在入侵者。

点击相应的 IP 地址,会显示更多信息,表明该所有者已在我的黑名单中。

哦不,仔细一看,此时此刻,与那个 IP 的连接已经建立了!

该死!选项“Kill conn.s (auto)”设置为 None

没问题,根据要求,我可以通过选择红色标记的 IP 来终止持有该连接的进程。

这暂时解决了问题,但下次呢?哦,现在我看到我的防火墙已自动添加了一条针对该 IP 的阻止规则。一切都好!

现在我可以安心地开始我的晨读了。;-)

Using the Code

除了这篇文章及其提供的链接,我还随代码提供了一个简短的 READ_ME.txt 文件,它将帮助您完成初始步骤。

关注点

借用 Andy Yen 的一些话(见上面的链接)

引用

“我们现在所做的只是第一步,但这表明随着技术的进步,隐私不必变得困难,也不必具有破坏性。最终,隐私取决于我们每个人。我们现在必须保护它,因为我们的在线数据不仅仅是零和一的碎片。它实际上远不止于此。它是我们的生活,我们的个人故事,我们的朋友,我们的家人,在某种程度上也是我们的希望和抱负。所以,现在是我们站出来说:是的,我们确实想生活在一个拥有在线隐私的世界里。是的,我们可以共同努力将这个愿景变为现实!”

要了解有关在线隐私风险的真实故事,请查看这些链接

如果您想为保护您的隐私做更多事情,请查看AC4QGP (Audio Chat for Quite Good Privacy):在独立设备中使用“增强型”端到端加密和音频信号调制进行聊天,确保隐私、匿名性和网络安全。

历史

  • 2020 年 5 月 22 日:初始版本
  • 2021年2月23日:修复了损坏的链接
  • 2021年2月24日:上传新代码(新增实用功能:添加节点ID以方便在列表中查找IP!)
  • 2021年2月27日:包含代码的 .zip 文件现在包含 CPOL 许可证
  • 2021年3月5日:添加了 AC4QGP 的链接
  • 2023年6月25日:添加了包含版本 1.1.0 的新 .zip 文件(更新至 Python3.9 并修复了 bug)和演示视频
  • 2024年2月3日:添加了指向该工具的“Linux”版本(PyPi、GitHub)的链接,该版本提供了更多功能,并且更成熟
  • 2024年2月6日:新增关于 Google 地图开发 API 收费的警告
© . All rights reserved.