天天看點

DOS 批處理實作 arp 綁定

    為了預防 ARP 病毒的攻擊,一般都建議 Windows 使用者把本機和網關實作 IP 與實體位址的綁定。Windows 下的綁定指令格式為:

    ARP -s [IP位址] [MAC位址]

    盡管指令很簡單,但是對于初級使用者仍然是一件困難的事情,特别是還要通過運作 ipconfig.exe 指令擷取網關和本機的 MAC 位址就更是一件難事。即使是有經驗的網管,敲這些指令,再擷取資料,再完成綁定,也是一件單調乏味的事情。為了簡化操作、提高效率,有必要發揮程式的作用,寫一段代碼來完成這項工作。那些 VC++、Delphi、C# 之流的大型程式設計自然能完成程式設計任務,但是總給人大動幹戈的味道。其實,充分發揮 DOS 批處理的威力,隻用寫一些“腳本”就可以完成這些事情了。

    隻要把以下代碼儲存成一個擴充名為 .bat 的批處理檔案,需要的時候用滑鼠輕按兩下一下,一切事情就全部搞定了。

    程式的流程如下:

    帶參數 /all 運作 ipconfig.exe 程式,運作結果儲存到生成的 ipconfig.txt 文本檔案裡。

    運作 find.exe 程式,在 ipconfig.txt 檔案裡搜尋字元串 “Physical Address”。find.exe 程式的運作結果,儲存到生成的文本檔案 phyaddr.txt 裡。在我的機器上,phyaddr.txt 内容為(實際檔案沒有行号):

    1,

    2,———- IPCONFIG.TXT

    3,   Physical Address. . . . . . . . . : 00-00-E2-89-9E-BD

    4,

    語句 for /f “skip=2 tokens=12″ %%M in (phyaddr.txt) do set Mac=%%M 是取得本地實體 MAC 位址的語句,結果臨時儲存在 %Mac% 變量裡。“for …”語句的意思是,phyaddr.txt 檔案的内容,跳過前面 2 行,餘下的行取第 12 列,每列之間的分隔符為預設的”空格”。注意本行的列包括單詞和所有的“.”字母。這樣 Mac=00-00-E2-89-9E-BD,就是本機網卡的實體位址了。

    下面取本機 IP 位址的道理也類似。綁定指令是 arp -s %IP% %Mac%。

    再後面擷取網關的 MAC 和 IP 位址的方法也與前邊類似。注意運作一次 ping %GateIP% -n 1 指令,是為了取得網關 Arp 資訊在本機的緩存,確定 arp -a %GateIP% 指令能取得網關的資訊,否則隻能得到文本:No ARP Entries Found。

    然後生成 GateMac.txt 檔案,從中取到網關的 MAC 位址。最終網關也獲得了 arp 綁定。

    注意以冒号“:”開頭的語句是批處理檔案的注釋語句。批處理腳本的語句(例如 for 語句)的更多資訊,請在網上搜尋相關資料。

    從這裡可以看到,DOS 指令行程式,包括批處理檔案,并不是作為擺設存在的,更沒有過時,合理利用,作用還是非常大的。譬如 NET、NETSH、NETASAT 等等指令,在網管工作中都是經常用到的,可以完成幾乎所有圖形界面程式能完成的工作,但有時更友善一些。

    附:

    @echo off

    :::讀取本機Mac位址

    if exist ipconfig.txt del ipconfig.txt

    ipconfig /all >ipconfig.txt

    if exist phyaddr.txt del phyaddr.txt

    find “Physical Address” ipconfig.txt >phyaddr.txt

    for /f “skip=2 tokens=12″ %%M in (phyaddr.txt) do set Mac=%%M

    :::讀取本機ip位址

    if exist IPAddr.txt del IPaddr.txt

    find “IP Address” ipconfig.txt >IPAddr.txt

    for /f “skip=2 tokens=15″ %%I in (IPAddr.txt) do set IP=%%I

    :::綁定本機IP位址和MAC位址

    arp -s %IP% %Mac%

    :::讀取網關位址

    if exist GateIP.txt del GateIP.txt

    find “Default Gateway” ipconfig.txt >GateIP.txt

    for /f “skip=2 tokens=13″ %%G in (GateIP.txt) do set GateIP=%%G

    ping %GateIP% -n 1

    :::讀取網關Mac位址

    if exist GateMac.txt del GateMac.txt

    arp -a %GateIP% >GateMac.txt

    for /f “skip=3 tokens=2″ %%H in (GateMac.txt) do set GateMac=%%H

    :::綁定網關Mac和IP

    arp -s %GateIP% %GateMac%

    :::删除臨時檔案

    del GateIP.txt

    del GateMac.txt

    del IPAddr.txt

    del ipconfig.txt

    del phyaddr.txt

    :::測試綁定結果

    arp -a

    :::exit

本文轉自網眼51CTO部落格,原文連結:http://blog.51cto.com/itwatch/286597,如需轉載請自行聯系原作者

繼續閱讀