MACアドレスを変更した後、インターネットに接続できない

MACアドレスを変更した後、インターネットに接続できない

私は、リストから選択したメーカーの MAC アドレスに変更する BASh スクリプトを作成しています。スクリプトの最後の部分を実行すると、終了する前に停止します。その部分のコードは次のとおりです。

function spoofUseMAC() {

  echo
  read -p "[*] $($stopAllFX; $bgBlack; $white)Enter the number code for manufacturer: >>> " num
  echo "[-] Generating MAC Address"
  num=$( expr $num - 1 )
  declare -a array
  while read -r; do
    array+=( "$REPLY" )
  done < addr.txt
  end=$( for i in {1..6} ; do echo -n ${hexchars:$(( $RANDOM % 16 )):1} ; done | sed -e 's/\(..\)/:\1/g' )
  macAddress=${array[$num]}$end
  echo "[-] MAC Address generated !"
  echo "[-] Using address: $macAddress"

  $skyBlue; $bold; echo
  ifconfig
  $white
  read -p "[*] $($stopAllFX; $bgBlack; $white)Select an interface: >>> " iface
  $yellow; echo "[-] $iface selected !"
  $white; echo  "[-] Disabling $iface ..."
  ifconfig $iface down
  ifconfig '$iface' hw ether '$macAddress'
  echo "[-] MAC Address spoofed !"
  sleep 1
  echo "[-] Enabling $iface ..."
  ifconfig '$iface' up
  echo "[-] $iface enabled !"
  echo "[-] Using address: $macAddress"
  exit

}

function spoofSearchAgainOrNot() {

  $bold; $white; echo
  echo "[*] $($stopAllFX; $bgBlack; $white)Please select an option from the list below:"
  $yellow; $bold; echo "        [$($white)0$($yellow)] $($stopAllFX; $bgBlack; $white)Search again"
  $yellow; $bold; echo "        [$($white)1$($yellow)] $($stopAllFX; $bgBlack; $white)Use one of these"
  read -p ">>> " searchAgainOrNot
  if [[ "$searchAgainOrNot" == "0" ]]; then
    spoofSearch
  elif [[ "$searchAgainOrNot" == "1" ]]; then
    spoofUseMAC
  else
    spoofSearchAgainOrNot
  fi

}

# Spoof, search option selected
function spoofSearch() {

  $bold; echo
  read -p "[*] $($stopAllFX; $bgBlack; $white)Search for a manufacturer: >>> " search
  $blue; awk -F '#' '{printf("%10d %s\n", NR, ":" $1 )}' /usr/bin/oui.txt | grep -i $search

  spoofSearchAgainOrNot

}

# Spoof
function spoof() {

  echo; $white
  echo "[*] $($stopAllFX; $bgBlack; $white)Please select an option from the list below:"
  $yellow; $bold; echo "        [$($white)0$($yellow)] $($stopAllFX; $bgBlack; $white)Search for a manufacturer"
  $yellow; $bold; echo "        [$($white)1$($yellow)] $($stopAllFX; $bgBlack; $white)Browse for a manufacturer through $($bold)long $($stopAllFX; $bgBlack; $white)list"
  read -p ">>> " searchOrBrowse
  if [[ $searchOrBrowse == "0" ]]; then
    spoofSearch
  elif [[ $searchOrBrowse == "1" ]]; then
    spoofBrowse
  else
    spoof
  fi

}

このスクリプトを実行した後、インターネットを使用できないのはなぜですか (git cloneと表示されますcould not resolve hostname: github.com)? また、終了しないのはなぜですか?

編集: これは MacOS と Linux で動作するはずです。MacOS ではコマンドはありませんip routeが、Linux ではip route次のようになります:

192.168.0.0/24 dev wlp1s0  proto kernel scope link  src 192.168.0.18 
192.168.0.0/24 dev wlp1s0  proto kernel scope link  src 192.168.0.18  metric 600

答え1

一部のカードは、MAC アドレスの変更/偽装に関して少々扱いが難しいです。

OSX では、インターフェイスの MAC アドレスの変更、特に Wi-Fi インターフェイスは、正しく実行されるまで、たとえば多くの場合ループで複数回実行する必要があります。これは、一定の時間内に実行する必要があるためと思われます。最新バージョンの OSX/MacOS では、最初はそれが想定されていないことがよくあります。

特に OSX では、インターフェイス/ドライバーが MAC の後数秒間混乱するようです。ただし、回復します。

まれなブランドでは、これが好ましくありません。一部のブランドでは、製造元 ID である最初の 3 オクテット (「:」を除いた最初の 6 桁) を変更することは推奨されていません。

多くの場合、デフォルト ルートが失われたり、ルーター/AP がユーザーの情報を失ったりすることがあります。プロセスはほぼ自動的に行われるはずですが、Linux では、MAC アドレスを変更した後に DHCP サービスを再起動する必要がある場合もあります。

答え2

問題が見つかりました。s の 1 つ$ifaceが引用符で囲まれていましたが、そうであるべきではありませんでした。

関連情報