使用DD-WRT和Perl监控我的手机网络活动

我有一部屏幕破裂的手机已经好几年了,但最近当玻璃开始脱落时,我觉得是时候升级了。我买了一部三星Galaxy S8,在通过Google搜索时,惊讶地看到“来自您的计算机网络的异常流量”消息。这激起了我的好奇心,所以我决定监控手机的网络流量,看看它与谁进行了通信。
路由器设置
我在家里的WiFi路由器上运行DD-WRT Linux。DD-WRT可以运行一个Rflow服务,其中将NetFlow流量数据通过UDP发送到网络中的另一台计算机。我启用了该服务,并将其配置为向我的笔记本电脑的IP地址和默认端口2055发送。
监控
我安装了ntop,并设置了一个指向UDP套接字的虚拟接口,然后!它迅速开始显示NetFlow数据。问题是,我无法找出如何过滤掉不是从我手机来的数据(我尝试过的各种pcap过滤表达式都没有工作)。此外,依赖软件程序来解析UDP套接字中的数据这样简单的事情让我感到烦恼。
幸运的是,我会说chainsaw,我迅速编写了这个脚本来完成这项工作
#!/usr/bin/env perl
use IO::Socket::INET;
use Data::Netflow;
my $sock = IO::Socket::INET->new(
LocalPort => 2055,
Proto => 'udp'
);
open my $logfile, '>>', 'galaxy-s8.log' or die $!;
my ($sender, $datagram);
while ($sender = $sock->recv($datagram, 0xFFFF))
{
my ($sender_port, $sender_addr) = unpack_sockaddr_in($sender);
$sender_addr = inet_ntoa($sender_addr);
my ($headers, $records) = Data::Netflow::decode($datagram, 1) ;
for my $r (@$records) {
if ($r->{SrcAddr} eq '192.168.1.139' && $r->{DstAddr} ne '192.168.1.1') {
printf $logfile "%s,%d,%d,%d,%d\n", $r->{DstAddr}, $r->{DstPort}, $r->{Packets}, $r->{Octets}, time;
}
}
}
脚本在端口2055上打开一个UDP套接字并从中读取数据报。它使用Data::Netflow来解析套接字中的数据报。decode
函数接受一个数据报并返回一个包含头部数据的hashref和一个包含NetFlow记录的arrayref。每个记录都是一个hashref,并且奇怪的是,默认情况下其键是字符串化的数字(“1”到“20”)。
然而,如果传递给decode
函数的第二个参数是true,则记录hashref使用字段名而不是数字。每个记录都包含诸如源和目标IP地址和端口号、发送的数据包数量、数据包中的总字节数等信息。如果记录的源IP地址与我的手机的网络地址匹配,则脚本将相关信息打印到日志文件中。
我禁用了手机上的移动数据,并运行了这个脚本24小时。
结果
我使用Net::Whois::IP查找每个IP地址的组织。以下是按发送数据包数量排名前十的组织
Fastly (SKYCA-3) => 1243
OPENX TECHNOLOGIES, INC. (OPENX) => 989
Saferoute Incorporated (SAFER-1) => 553
Servers.com, Inc. (SERVE-105) => 13
Integral Ad Science, Inc. (ASML-5) => 36
Facebook => 724
Google LLC (GOOGL-2) => 794
Amazon.com, Inc. (AMAZO-4) => 2000
Search Guide Inc (SG-63) => 140
Chaos Computer Club e.V => 224
以及按发送字节数排名
Amazon Technologies Inc. (AT-88-Z) => 1218193
Amazon.com, Inc. (AMAZO-48) => 9230
Google LLC (GOGL) => 40239218
VLAN927 => 2005
ADFORM-NET => 3041
ANS Communications, Inc (ANS) => 1880
Wal-Mart Stores, Inc. (WALMAR) => 1573
INAP-NYM-QUANTCAST-26423 => 4822
Web.com, Inc. (WEBCO-24) => 4232
CERFnet (CERF) => 361
在我看来,这似乎主要是网页浏览/营销数据。关于Chaos Computer Club的条目来自使用Orfox(一个Tor浏览器)。虽然诚实地讲,如果恶意软件正在使用AWS,我不确定我该如何判断。也许查看数据包的分布和频率,并将其与我的手机活动日志相关联,可能是一种识别可疑流量的方法。
与此同时,Google已经停止警告我关于异常活动,而且我的屏幕还没有破裂,所以我猜想我现在会继续使用这部手机。
参考文献
- DD-WRT是路由器的一个Linux发行版
- Data::Netflow是一个Perl模块,可以编码/解码Netflow数据版本5和9(DD-WRT产生版本5)
- Net::Whois::IP 是一个用于运行 WHOIS 查询的 Perl 模块,它将响应解析为 Perl 数据结构,尽管它没有规范化键。
这篇文章最初发表在 PerlTricks.com 上。
标签
反馈
这篇文章有什么问题吗?请通过在 GitHub 上创建问题或拉取请求来帮助我们。