TeraTerm Macro确认网段存活主机

用途

批量ping某网段内全部IP,然后输出arp table确认有哪些主机存活

工具

TeraTerm Mcaro
Python

方法

Python创建ping命令list
TTL逐行读取并实行,最终输出show arp部分的log

代码

※写在[ ]中的是可变量

python创建命令集
i = 2
filename = 'command.txt'
with open(filename,'a') as file_object:
     while i < 255:
         file_object.writelines("ping [前24位ip]" +  str(i) + " routing-instance [名称] count 1 no-resolve rapid" + "\n")
         i = i + 1

※对于/24以外的网段,需要修改i的初始和最终值

TTL
;定数
HOSTADDR = '[网关IP]'
USERNAME = '[用户ID]'
PORTNUM = '22'

;RTにログイン
msg = 'Enter password for user '
strconcat msg USERNAME
passwordbox msg 'Get password'

strconcat HOSTADDR ':portnum /ssh /auth=password /user='
strconcat HOSTADDR username
strconcat HOSTADDR ' /passwd='
strconcat HOSTADDR inputstr

connect HOSTADDR

;ログイン遅いから待つ
pause 10

;ファイル読み込み&実行
fileopen FH 'C:\Users\aaa\Desktop\command.txt' 0

sendln 'ping [网段最初的IP] routing-instance [名称] count 1'

:loopstart

filereadln FH line

if result<>0 then
    goto loopend
else
    wait '1 packets transmitted'
    sendln line
    goto loopstart
endif

:loopend

fileclose FH

;arpログ出力
wait '[网段最后的IP] ping statistics'

logopen 'C:\Users\aaa\Desktop\log.txt' 0 0

sendln 'show arp interface [接口名]|no-more'

pause 1

;arp命令不显示自身mac与ip所以
sendln 'show interface [接口名]|no-more'

pause 1

logclose

closett

messagebox 'Successfully Completed' 'Hey'

end

关于TTL的一点解说

都是自己纠结过的地方。。

  • result在每个命令中代表不同的含义,并且都在reference中有注明,每次使用时都需要确认。0 1等数字同理
  • 语法中的filehandle是“代表整个文件”的变量,相当于在fileopen命令中给某个文件赋予一个标签,起什么名儿无所谓,自己好懂也方便书写即可,后续读取写入等操作都需要用这个标签来识别文件
  • 善用wait和pause,不然你的机器反应速度很可能跟不上程序运行速度。。。就会出现一些很魔幻的现象

おわりに

其实自己也觉得实现的方法很蠢了。。
只有一下午的时间来写
大部分都在读TTL的reference
(中间还开了两小时不知所云的会)
(而且TTL是真的傻白甜。。。)
尽力了。。。
不过从构思到完成的过程是真的很有意思呀( ' v ' )

你可能感兴趣的:(TeraTerm Macro确认网段存活主机)