优质广告供应商

广告是为了更好地支持作者创作

Mac OS Wi-fi 共享过滤MAC地址

有了Mac电脑设备之后,有个功能,或许大家都用过,就是WiFi共享。这个功能可以让你组件一个局域网,Mac充当一个无线AP,就是无线路由器。其中利好,不用多说,但是也会遇到一些尴尬的情况。比如,碍于情面,你可能会把你的WiFi密码告诉很多人,可是,如果所有的访问压力都集中在你一台电脑上,那你本机的带宽就被占光了,还比如有些连上来的同学,看视频,下载。

怎么做可以让我在让对方不察觉的情况,阻止其连接,即使告诉了你密码。心机boy 😆 !

经过几次的探索和多次的Google,本来是想做的更隐秘一点,限速。无奈不会呀,如有同学了解,还烦请告知啊。

退而求其次吧,让对方知道密码,也连不上不也一样吗,而且,保证一部分人可以上,你连不上,只能说明你人品不好,换手机吧,哈哈😆 。

知识储备


首先我们要明白,苹果的Wifi共享使用的DHCP功能,是由一个叫bootpd的程序控制的。想了解里面的详细说明,可以在你的terminal上输入man bootpd来了解一下,其实,我们接下来的事,也是围绕着它来做的。
简单介绍一下bootpd

  • 实现了DHCP/BOOTP,符合如下的一些RFC文档:RFC951, RFC1542, RFC2131, 和 RFC2132
  • 使用配置文件,使用配置文件/etc/bootpd.plist,该配置文件为一个XML格式的文件。里面有好多字段用于控制服务的行为
  • Allow/Deny 类似于路由器的ACL(访问控制列表)或者是防火墙的in/out规则,如果定义了Deny,出现在Deny中的 MAC 地址,在DHCP请求的时候,会被拒绝,bootpd的做法很简单,丢包。如果只有Allow规则,则只有出现在列表里面的地址,才允许访问。
  • ignore_allow_deny 这个字段里面是一个数组,数组的内容,是bootpd server name,在Mac OS中,默认的名字,应该是Bridge100。如果这个字段
    中不出现Bridge100,那ignore_allow_deny就会对Bridge100失效。换句话说,我们的Allow/Deny规则,就会起作用。
  • /etc/bootpd.plist,什么时候创建,长啥样。在你使用共享Wifi的时候生成,至于长啥样,留到最后再仔细看吧。你只需要知道,它就是一个XML文件。

话不多说,开始干吧!

  1. 把已有的bootpd.plist复制到一个临时文件里面,需要root权限。
sudo cp /etc/bootpd.plist /tmp/bootpd.plist
  1. 使用vim或者Sublime打开它,并找到ignore_allow_deny,把里面的内容修改一下。

before

    <key>ignore_allow_deny</key>
    <array>
        <string>bridge100</string>
    </array>

after

    <key>ignore_allow_deny</key>
    <array>
        <string>bridge100_bk</string>
    </array>

目的,不让默认的bridge100生效。

  1. 添加Allow规则

before 如果你是第一次修改,没有Allow规则
after

    <key>allow</key>
    <array>
        <string>DC:37:14:57:EF:1B</string>
        <string>6c:72:e7:74:84:4c</string>
    </array>

添加规则,让列表中的设备能够获取到IP地址

  1. 把临时文件复制回去

sudo cp /tmp/bootpd.plist /etc/bootpd.plist

  1. 重启

关闭WiFi,然后再启动。有兴趣的同学可以留意一下关闭WiFi后/etc/bootpd.plist文件的变化。

  1. 测试一下

把你自己手机的MAC地址加进去,然后再让别人试一下,他已经哭晕,哈哈。大功告成!


说好的bootpd.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Subnets</key>
<array>
<dict>
<key>_creator</key>
<string>com.apple.NetworkSharing</string>
<key>allocate</key>
<true/>
<key>dhcp_domain_name_server</key>
<array>
<string>192.168.2.1</string>

        </array>
        <key>dhcp_router</key>
        <string>192.168.2.1</string>
        <key>interface</key>
        <string>bridge100</string>
        <key>lease_max</key>
        <integer>86400</integer>
        <key>lease_min</key>
        <integer>86400</integer>
        <key>name</key>
        <string>192.168.2/24</string>
        <key>net_address</key>
        <string>192.168.2.0</string>
        <key>net_mask</key>
        <string>255.255.255.0</string>
        <key>net_range</key>
        <array>
            <string>192.168.2.2</string>
            <string>192.168.2.254</string>
        </array>
    </dict>
</array>
<key>allow</key>
<array>
    <string>DC:37:14:57:EF:1B</string>
</array>
<key>bootp_enabled</key>
<false/>
<key>detect_other_dhcp_server</key>
<array>
    <string>bridge100</string>
</array>
<key>dhcp_enabled</key>
<array>
    <string>bridge100</string>
</array>
<key>dhcp_ignore_client_identifier</key>
<true/>
<key>ignore_allow_deny</key>
<array>
    <string>bridge100_bk</string>
</array>
<key>use_server_config_for_dhcp_options</key>
<false/>

</dict>
</plist>

参考

  1. Eye-Fi Upload via Mac OS X Internet Sharing
  2. Apple bootpd

优质广告供应商

广告是为了更好地支持作者创作

推荐阅读更多精彩内容