当前位置: 首页 > 科技观察

如何在Ubuntu16.04下随机化您的WiFiMAC地址

时间:2023-03-21 00:45:48 科技观察

您设备的MAC地址可以记录您在不同WiFi网络中的活动。可以共享和出售此信息以识别特定个人。但这可以通过随机生成的伪造MAC地址来防止。每个网络设备,例如WiFi或以太网卡,都有一个称为MAC地址的唯一标识符,例如:b4:b6:76:31:8c:ff。这就是您可以上网的原因:每当您连接到WiFi时,路由器都会使用此地址向您接收和发送数据,并将您与网络上的其他设备区分开来。这种设计的缺陷是唯一性,同一个MAC地址可以用来跟踪你。连接到星巴克WiFi?好的,注意到了。在伦敦地铁上?也录了如果您曾经在WiFi验证页面上输入过您的真实姓名,那么您已经将自己与此MAC地址相关联。如果不仔细阅读许可服务条款,您可能会争辩说机场的免费WiFi是通过出售所谓的“客户分析数据”(您的个人信息)来赚钱的。待售对象包括酒店、餐厅和任何想认识您的人。我不希望信息被记录下来然后卖给多家公司,所以我花了几个小时才想出一个解决方案。MAC地址并不总是相同的。幸运的是,可以在不断开网络连接的情况下随机生成伪造的MAC地址。我想随机生成我的MAC地址,但是有三个要求:不同网络的MAC地址不一样。这意味着我在星巴克的MAC地址与在伦敦地铁网络上的不同,因此无法将我在不同服务提供商之间的活动联系起来。MAC地址需要经常更改,这样网上就没有人知道我就是去年走过这里75次的人。MAC地址应全天保持不变。大多数网络会在MAC地址更改时断开您的连接,然后必须转到身份验证页面才能再次登录——这很烦人。操作NetworkManagerNetworkManager我第一次尝试使用名为macchanger的工具失败了。因为网管NetworkManager会根据自己的设置恢复默认的MAC地址。我知道NetworkManager1.4.1+可以自动生成随机MAC地址。如果你使用的是Ubuntu17.04版本,可以根据这个配置文件来实现。但这不太符合我的三个要求(你必须在随机和稳定两个选项之间进行选择,但没有一个是一天不变的)因为我使用的是Ubuntu16.04,网络管理器版本是1.2,并且高版本的新功能不能直接使用。可能网络管理器有一些随机化方法支持,但我没能做到。所以我制作了一个脚本来实现这一点。幸运的是,网络管理器1.2允许模拟MAC地址。您可以在连接的网络中看到“编辑连接”选项。网络管理器还支持挂钩-位于/etc/NetworkManager/dispatcher.d/pre-up.d/中的任何脚本都在建立网络连接之前执行。分配随机生成的假MAC地址我想根据网络ID和日期生成新的随机MAC地址。我们可以使用网络管理器的命令行工具nmcli来显示所有可用的网络:>nmcliconnectionNAMEUUIDTYPEDEVICEGladstoneGuest618545ca-d81a-11e7-a2a4-271245e11a45802-11-wirelesswlp1s0DoESDinky6e47c080-d81a-11e7-87b211-wireless--PublicWiFi79282c10-d81a-11e7-87cb-6341829c2a54802-11-wireless--virgintrainswifi7d0c57de-d81a-11e7-9bae-5be89b161d22802-11-wireless--因为每个网络都有唯一的标识符(UUID),为了实现我的计划,我把UUID和date拼接在一起,然后用MD5生成hash值:#eg618545ca-d81a-11e7-a2a4-271245e11a45-2017-12-03>echo-n"${UUID}-$(date+%F)"|md5sum53594de990e92f9b914a723208f22b3f-生成可以替换MAC地址的最后八个字节的结果。值得注意的是第一个字节02表示这个地址是自己分配的。实际上,真实MAC地址的前三个字节是由制造商确定的,例如Intel的b4:b6:76。有些路由器可能会拒绝自己分配的MAC地址,但我没有遇到过这种情况。此脚本每次连接到网络时使用nmcli指定一个随机生成的假MAC地址。最后,我检查了ifconfig的输出,发现MAC地址HWaddr已更改为随机生成的地址(从Intel模拟),而不是我的真实MAC地址。>ifconfigwlp1s0Linkencap:EthernetHWaddrb4:b6:76:45:64:4dinetaddr:192.168.0.86Bcast:192.168.0.255Mask:255.255.255.0inet6addr:fe80::648c:aff2:9a9d:764/64范围:LinkUPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1RXpackets:12107812errors:0dropped:2overruns:0frame:0TXpackets:18332141错误:0dropped:0overruns:0carrier:0collisions:0txqueuelen:1000RX字节:11627977017(11.6GB)TX字节:20700627733(20.7GB)脚本完整的脚本也可以在Github上查看。#!/bin/sh#/etc/NetworkManager/dispatcher.d/pre-up.d/randomize-mac-addresses#使用伪造的MAC#地址配置NetworkManager中保存的每个WiFi连接,从连接的UUID中获取种子日期,例如:#'c31bbcc4-d6ad-11e7-9a5a-e7e1491a7e20-2017-11-20'#这让您的MAC无法(?)跨WiFi提供商进行跟踪,并且#对于一个提供商来说跨天进行跟踪。基于MAC进行身份验证的门户,您可能希望#自动登录:)#注意NetworkManager>=1.4.1(Ubuntu17.04+)可以做类似的事情#automatically.exportPATH=$PATH:/usr/bin:/binLOG_FILE=/var/log/randomize-mac-addressesecho"$(date):$*">${LOG_FILE}WIFI_UUIDS=$(nmcli--fieldstype,uuidconnectionshow|grep802-11-wireless|cut'-d'-f3)为${WIFI_UUIDS}中的UUID执行UUID_DAILY_HASH=$(echo"${UUID}-$(date+F)"|md5sum)RANDOM_MAC="02:$(echo-n${UUID_DAILY_HASH}|sed's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5/')"CMD="nmcli连接修改${UUID}wifi.cloned-mac-address${RANDOM_MAC}"echo"$CMD">>${LOG_FILE}$CMD&donewaitUpdate:使用您自己指定的MAC地址以避免与真实的intel地址冲突感谢@_fink