如何运行命令以使用来自txt文件的数据来巧妙地逐个执行它们

时间:2014-11-22 17:50:14

标签: macos bash terminal command mac-address

我会准确地解释它!

  1. 所以,我有8个朋友使用相同的互联网连接,我主要是在线玩游戏。
  2. 连接是这样的,当您打开连接时,它会显示ISP的登录页面,只允许您在登录后上线。
  3. 我们互相拥有mac地址。如果要检查我的朋友是否在线,我执行以下命令:

    sudo ifconfig en0 ether xx:xx:xx:xx:xx:xx; sudo ifconfig en0 down; sudo ifconfig en0 ether up; sleep 6; ping -c 3 www.google.co.in;

  4. 其中xx:xx:xx:xx:xx:xx = MAC ADDRESS,en0 = ethernet

  5. 我使用睡眠,因为连接路由器需要大约6秒

  6. 因此ping显示结果是否在线

  7. 现在我在txt文件中有8个这样的mac地址,每个文件组成一行。

  8. Q1)我可以只使用一个命令,它从文本文件中逐个获取每个mac地址并在上面的命令中使用它,并在我的txt结束时结束吗?

    Q2)是否有任何备用命令用于上述目的,因为我自己组织上述命令以按照我的用途正常工作?

    我使用Mac OS

3 个答案:

答案 0 :(得分:0)

您可以使用 arpwatch 来跟踪以太网/ IP地址配对。 你这样运行:

arpwatch -i eth0

如果你想查看日志:

tail -f /var/log/syslog

输出:

  11月15日15:59:34 debian arpwatch:新站192.168.1.2 0:17:9a:a:f6:44 eth0

然后你可以更容易地做一个bash脚本。

一些例子...... 找到MAC的最后一个日志

tail -f /var/log/syslog | egrep -i xx:xx:xx:xx:xx:xx

提取该日志的时间

tail -f /var/log/syslog | egrep -i xx:xx:xx:xx:xx:xx | awk '{print $3}'

或更有用的东西,比如ip

tail -f /var/log/syslog | egrep -i xx:xx:xx:xx:xx:xx | awk '{print $8}'

答案 1 :(得分:0)

我想你想要这样的东西:

#!/bin/bash
while read m; do
   echo Checking MAC address: $m
   sudo ifconfig en0 ether $m
   sudo ifconfig en0 down
   sudo ifconfig en0 ether up
   sleep 6
   ping -c 3 www.google.co.in
   if [ $? -eq 0 ]; then
      echo Ping successful
   else
      echo Ping failed
   fi
done < MACs.txt

MACs.txt看起来像这样:

11.22.33.44.55.66
22.33.44.55.66.77
33.44.55.66.77.88

更新了答案

如果你想要它更加简化,你可能更喜欢这个并不总是等待6秒的版本 - 而是它ping了10次,ping之间有1秒,如果ping成功则立即停止,所以应该更快。

#!/bin/bash
while read m; do
   echo Checking MAC address: $m
   sudo ifconfig en0 ether $m
   sudo ifconfig en0 down
   sudo ifconfig en0 ether up
   # Ping up to 10 times, stopping immediately if successful
   success=0
   for i in {1..10}; do
      ping -c 3 -t 1 www.google.co.in > /dev/null
      if [ $? -eq 0 ]; then
         success=1
         break
      fi
   done
   if [ $success -eq 1 ]; then
      echo Success: $m
   else
      echo Fail: $m
   fi
done < MACs.txt

答案 2 :(得分:0)

这是最终报价

#!/bin/bash
while read m; do
   echo Checking MAC address: $m
   sudo ifconfig en0 ether $m
   sudo ifconfig en0 down
   sudo ifconfig en0 up
   sleep 5
   i=1
  while [ $i -eq 1 ]
    do
      ping -c 3 www.google.co.in > /dev/null
      e=$?
         if [ $e -eq 0 ]
          then
            echo ONLINE
            i=0
            echo $m >> ONLINE.txt
         elif [ $e -eq 2 ]
          then
           echo OFFLINE
           i=0
           echo $m >> OFFLINE.txt
         else
           echo Waiting To be Connected
           i=1
           sleep 4
         fi
    done
done < macs.txt
echo HI, These macs are ONLINE
cat ONLINE.txt
echo Sorry these are OFFLINE
cat OFFLINE.txt
rm ONLINE.txt OFFLINE.txt

感谢您的帮助!