作为打工人来说,特地是 996,、007 的工作,除了干饭之外,最缓和刺激的莫过于下班的时候偶然偷偷闲,去池塘外面摸摸鱼。
个别人摸得哪些鱼呢?聊天、微博、微信朋友圈、小游戏、小说、股票基金等等。
摸鱼的最大妨碍是什么?当然是包工头(老板)了,他们巴不得打工人 24 小时不间断地干活。
然而人的精力是无限的,一天只能集中精力干那么几个小时,其余工夫须要通过摸鱼来调剂无限,所以咱们只有摸鱼不被包工头发现,那是相当欢快的一件事件。
为此,我用 Python 写了一个小工具——BOSS 来了,来监控老板,缩小摸鱼被发现的概率。
思路
咱们晓得,每台电脑或者手机等终端都有一个固定的 Mac 地址,而咱们公司办公区域有几个 AP,大家手机连贯的都是间隔本人最近的 AP,所以实践上如果我晓得老板手机的 Mac 地址,而后扫描局域网的所有 Mac 地址,如果呈现老板手机的 Mac 地址,那么老板大概率是在我左近的,此时摸鱼比拟危险;如果没有呈现老板额 Mac 地址,那么老板可能离我比拟远,此时摸鱼比拟平安。
基于下面思路,我要做的就是搞到老板手机的 Mac 地址,而后一直轮询局域网的所有 Mac 地址,一旦发现呈现老板手机的 Mac 地址,我就老老实实干活,一旦老板的 Mac 地址隐没了,就能够摸鱼了。
实现
获取老板手机 Mac 地址
怎么搞到老板的手机 Mac 地址?
好多人听到这个可能就感觉没戏了!总不能把老板的手机偷过来,而后去设置外面找吧。
天无绝人之路,只有肯动脑,方法可不少!
我的办法是这样的。当其余共事没有走动的时候,老板来的时候,保留一次局域网的 Mac 地址信息,当老板走的时候再保留一次,而后比对,找出老板手机的 Mac 地址。为了确保准确性,能够多试几次。
获取所有 Mac 地址
第一步,应用 ipconfig/all
命令,能够找到以后所处的网段:
第二步,应用轮询命令一一 ping
网段内的 IP,这一步是为了建设 ARP 表。命令如下:
for /L %i IN (1,1,254) DO ping -w 1 -n 1 192.168.1.%i
其中,192.168.1.%i 是要查问的网段。
第三步,应用 arp
命令能够查问所有的 Mac 地址,命令为:
arp -a
运行之后,你会看到相似上面的后果:
<figcaption style=”margin: 5px 0px 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; text-align: center; color: rgb(136, 136, 136); font-size: 14px;”>mac 地址列表 </figcaption>
代码实现
思路曾经失去验证,筹备工作也做好了,接下来就是代码实现了。
首先,咱们依据下面的思路,先写一个获取局域网所有的 Mac 地址的办法。
def get_macs():
# 运行 cmd 管制窗口,输出“arp -a”,并将内容传递到 res 中
res = os.popen("arp -a")
# 读取 res 数据,转换为可读数据
arps = res.read()
print(arps)
# 将取得的 counts 中的数据依据“换行符”来进行宰割切片
result = arps.split('\n')
# 设一个空列表装 ip
ips = []
# 设一个空列表装 mac
macs = []
# 遍历
for i in range(1, len(result)):
# 取得列表中第 idx 个数据
line = result[i]
if ('Internet' in line) | (''== line) | (' 接口 ' in line):
continue
# 依据“”进行切片
line_split = line.split(" ")
index = 0
for l in line_split:
if l != '':
index += 1
if index == 1:
ips.append(l)
elif index == 2:
macs.append(l)
return ips, macs
而后,写一个定时轮询。
# 老板的 Mac 地址
bossMac = "01-00-5e-0b-14-01"
sleep_time = 5
while 1 == 1:
time.sleep(sleep_time)
ips, macs = get_macs()
is_come = 0
for mac in macs:
if mac == bossMac:
is_come = 2
# 如果 boss 来了,就隔 5 分钟扫描一次
sleep_time = 300
# 提醒报警
choice = g.msgbox(msg="有内鬼,终止交易!", title="OMG")
break
if is_come == 0:
# 如果 boss 走了,就隔 5 秒钟扫描一次
sleep_time = 5
g.msgbox(msg="一切正常!", title="OMG")
我这里设定的是:如果老板呈现了,就每隔 5 分钟轮询一次,因为老板在的话,要集中精力干活,不能太过频繁地想着摸鱼。如果老板走了,就每隔 5 秒钟轮询一次,摸鱼的时候还是要频繁预警比拟好!
运行程序,当老板来时,预警弹窗是这样子的:
当老板隐没后,弹窗内容是这样的:
总结
当然,如果老板没有开 WiFi,那么这个办法就生效了。或者老板过去了,然而 手机反馈慢了,没有切换到这边的 AP,那也会存在危险。所以不要齐全依赖这个小工具,摸鱼的时候还是要偶然察看一下周围环境。
源码:https://github.com/JustDoPyth…
文末
您的点赞珍藏就是对我最大的激励!
欢送关注我,分享 Python 干货,交换 Python 技术。
对文章有何见解,或者有何技术问题,欢送在评论区一起留言探讨!