-
Notifications
You must be signed in to change notification settings - Fork 0
/
getmacs.go
69 lines (54 loc) · 1.87 KB
/
getmacs.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package main
import (
"fmt"
"strings"
"github.com/ales999/cisaccs"
)
// GetMacsFromCisco забрать mac-address тфблицу из cisco
func GetMacsFromCisco() {
// Проверим что файл для записи задан.
useoutfile := len(cli.Getmacs.Outfile) > 1 // type bool --> exlude "-" with name
var outtofile []string
if useoutfile {
fmt.Println("Use output file:", cli.Getmacs.Outfile)
}
cmds := []string{"sh mac address-table | e CPU"}
acc := cisaccs.NewCisAccount(cli.Getmacs.CisFileName, cli.Getmacs.PwdFileName)
for _, cishost := range cli.Getmacs.Hosts {
// Включим метку для парсинга:
fmt.Println("hostgetmac:", cishost)
// Получаем массив строк что вернет нам cisco
sshouts, err := acc.OneCisExecuteSsh(cishost, cli.Getmacs.PortSsh, cmds)
if err != nil {
fmt.Printf("Error get data from host %s: %v\n", cishost, err)
continue
}
// Перебираем полученные строки
for _, line := range sshouts {
usedLine := true // Признак что что строка не содержит одну из исключенных, если они есть.
line = strings.TrimSpace(line)
// Если есть необходимость пропускать что содержит исключенное
if len(cli.Getmacs.ExclString) > 0 {
// Тогда пропускаем
for _, exclstr := range cli.Getmacs.ExclString {
if strings.Contains(line, exclstr) {
usedLine = false // Запрет использовать данную строку
}
}
}
if !usedLine {
continue // go get new line
}
// If set save to file
if useoutfile {
outtofile = append(outtofile, line+"\n")
} else {
// Print
fmt.Println(line)
}
}
}
if useoutfile {
WriteOutFile(outtofile, cli.Getmacs.Outfile)
}
}