parent
1a07ac99bf
commit
1bf61dd7ce
18 changed files with 1264 additions and 62 deletions
@ -1,4 +1,11 @@ |
||||
package management |
||||
|
||||
// Originator is T_Management
|
||||
|
||||
|
||||
type Memento struct { |
||||
State T_Management |
||||
} |
||||
|
||||
func (e *T_Management) CreateMemento() *Memento { |
||||
return &Memento{State: *e} |
||||
} |
||||
|
@ -0,0 +1,93 @@ |
||||
package proxy |
||||
|
||||
import ( |
||||
"bytes" |
||||
"context" |
||||
"fmt" |
||||
"io/ioutil" |
||||
"net/http" |
||||
"net/http/httputil" |
||||
"net/url" |
||||
|
||||
logger "github.com/cr3a70r/shield/Utils" |
||||
) |
||||
|
||||
type ProxyHttpServer struct { |
||||
ctx context.Context |
||||
http.Server |
||||
AddressAndPort string |
||||
Name string |
||||
logger *logger.Logger |
||||
} |
||||
|
||||
type ReverseProxy struct { |
||||
url *url.URL |
||||
proxy *httputil.ReverseProxy |
||||
logger *logger.Logger |
||||
port string |
||||
} |
||||
|
||||
type Override struct { |
||||
Header string |
||||
Match string |
||||
Host string |
||||
Path string |
||||
} |
||||
|
||||
type Config struct { |
||||
Path string |
||||
Host string |
||||
Override Override |
||||
} |
||||
|
||||
func NewProxy(urlString string, transport http.RoundTripper, director *httputil.ReverseProxy, logger *logger.Logger, port string) *ReverseProxy { |
||||
providedUrl, err := url.Parse(urlString) |
||||
|
||||
if err != nil { |
||||
return nil |
||||
} |
||||
|
||||
p := httputil.NewSingleHostReverseProxy(providedUrl) |
||||
p.Transport = transport |
||||
p.Director = director.Director |
||||
p.ModifyResponse = UpdateResponse |
||||
|
||||
return &ReverseProxy{ |
||||
url: providedUrl, |
||||
proxy: p, |
||||
logger: logger, |
||||
port: port, |
||||
} |
||||
} |
||||
|
||||
func (p *ReverseProxy) Handler(w http.ResponseWriter, r *http.Request) { |
||||
p.logger.PrintInfo("", map[string]string{ |
||||
"accept": r.Header.Get("Accept"), |
||||
"accept-encoding": r.Header.Get("Accept-Encoding"), |
||||
"accept-language": r.Header.Get("Accept-Language"), |
||||
"cache-control": r.Header.Get("Cache-Control"), |
||||
"connection": r.Header.Get("Connection"), |
||||
"pragma": r.Header.Get("Pragma"), |
||||
"sec-ch-ua": r.Header.Get("Sec-Ch-Ua"), |
||||
"user-agent": r.Header.Get("User-Agent"), |
||||
}) |
||||
|
||||
xsCode := r.Header.Get("X-Code") |
||||
|
||||
if r.Header.Get(xsCode) != "" { |
||||
p.logger.PrintInfo("", map[string]string{ |
||||
"xsCode": xsCode, |
||||
}) |
||||
} |
||||
|
||||
p.proxy.ServeHTTP(w, r) |
||||
} |
||||
|
||||
func UpdateResponse(r *http.Response) error { |
||||
|
||||
buf := bytes.NewBufferString("<input type=\"text\" name=\"browser\" value=\"ie\">") |
||||
|
||||
r.Body = ioutil.NopCloser(buf) |
||||
r.Header["Content-Length"] = []string{fmt.Sprint(buf.Len())} |
||||
return nil |
||||
} |
@ -0,0 +1,107 @@ |
||||
package Utils |
||||
|
||||
import ( |
||||
"encoding/json" |
||||
"io" |
||||
"os" |
||||
"runtime/debug" |
||||
"sync" |
||||
"time" |
||||
) |
||||
|
||||
// Define a Level type to represent the severity level for a log entry.
|
||||
type Level int8 |
||||
|
||||
// Initialize constants which represent a specific severity level. We use the iota
|
||||
// keyword as a shortcut to
|
||||
const ( |
||||
LevelInfo Level = iota |
||||
LevelError |
||||
LevelFatal |
||||
LevelOff |
||||
) |
||||
|
||||
// assign successive integer values to the constants.
|
||||
// Has the value 0. // Has the value 1. // Has the value 2. // Has the value 3.
|
||||
// Return a human-friendly string for the severity level.
|
||||
func (l Level) String() string { |
||||
switch l { |
||||
case LevelInfo: |
||||
return "INFO" |
||||
case LevelError: |
||||
return "ERROR" |
||||
case LevelFatal: |
||||
return "FATAL" |
||||
default: |
||||
return "" |
||||
} |
||||
} |
||||
|
||||
// Define a custom Logger type. This holds the output destination that the log entries // will be written to, the minimum severity level that log entries will be written for, // plus a mutex for coordinating the writes.
|
||||
type Logger struct { |
||||
out io.Writer |
||||
minLevel Level |
||||
mu sync.Mutex |
||||
} |
||||
|
||||
// Return a new Logger instance which writes log entries at or above a minimum severity // level to a specific output destination.
|
||||
func New(out io.Writer, minLevel Level) *Logger { |
||||
return &Logger{out: out, |
||||
minLevel: minLevel} |
||||
} |
||||
|
||||
// Declare some helper methods for writing log entries at the different levels. Notice // that these all accept a map as the second parameter which can contain any arbitrary // 'properties' that you want to appear in the log entry.
|
||||
func (l *Logger) PrintInfo(message string, properties map[string]string) { |
||||
l.print(LevelInfo, message, properties) |
||||
} |
||||
func (l *Logger) PrintError(err error, properties map[string]string) { |
||||
l.print(LevelError, err.Error(), properties) |
||||
} |
||||
func (l *Logger) PrintFatal(err error, properties map[string]string) { |
||||
l.print(LevelFatal, err.Error(), properties) |
||||
os.Exit(1) // For entries at the FATAL level, we also terminate the application.
|
||||
} |
||||
|
||||
// Print is an internal method for writing the log entry.
|
||||
func (l *Logger) print(level Level, message string, properties map[string]string) (int, error) { // If the severity level of the log entry is below the minimum severity for the
|
||||
// logger, then return with no further action.
|
||||
if level < l.minLevel { |
||||
return 0, nil |
||||
} |
||||
// Declare an anonymous struct holding the data for the log entry.
|
||||
|
||||
aux := struct { |
||||
Level string `json:"level"` |
||||
Time string `json:"time"` |
||||
Message string `json:"message"` |
||||
Properties map[string]string `json:"properties,omitempty"` |
||||
Trace string `json:"trace,omitempty"` |
||||
}{ |
||||
Level: level.String(), |
||||
Time: time.Now().UTC().Format(time.RFC3339), Message: message, |
||||
Properties: properties, |
||||
} |
||||
// Include a stack trace for entries at the ERROR and FATAL levels.
|
||||
if level >= LevelError { |
||||
aux.Trace = string(debug.Stack()) |
||||
} |
||||
// Declare a line variable for holding the actual log entry text.
|
||||
var line []byte |
||||
// Marshal the anonymous struct to JSON and store it in the line variable. If there // was a problem creating the JSON, set the contents of the log entry to be that
|
||||
// plain-text error message instead.
|
||||
line, err := json.Marshal(aux) |
||||
if err != nil { |
||||
line = []byte(LevelError.String() + ": unable to marshal log message: " + err.Error()) |
||||
} |
||||
// Lock the mutex so that no two writes to the output destination cannot happen // concurrently. If we don't do this, it's possible that the text for two or more // log entries will be intermingled in the output.
|
||||
l.mu.Lock() |
||||
defer l.mu.Unlock() |
||||
// Write the log entry followed by a newline.
|
||||
return l.out.Write(append(line, '\n')) |
||||
} |
||||
|
||||
// We also implement a Write() method on our Logger type so that it satisfies the
|
||||
// io.Writer interface. This writes a log entry at the ERROR level with no additional // properties.
|
||||
func (l *Logger) Write(message []byte) (n int, err error) { |
||||
return l.print(LevelError, string(message), nil) |
||||
} |
@ -0,0 +1,270 @@ |
||||
|
||||
{{define "title"}} |
||||
Protection | Shield |
||||
{{end}} |
||||
|
||||
{{define "body"}} |
||||
|
||||
<div class="row align-items-start"> |
||||
<div class="col"> |
||||
<div class="input-group mb-3"> |
||||
<span class="input-group-text" id="basic-addon1">Prefix</span> |
||||
<input type="text" class="form-control" placeholder="Prefix" aria-label="Prefix" aria-describedby="basic-addon1"> |
||||
<button class="btn btn-outline-secondary" type="button" id="button-addon2">show route</button> |
||||
</div> |
||||
<div class="input-group mb-3"> |
||||
<span class="input-group-text" id="basic-addon1">-Iface </span> |
||||
<input type="text" class="form-control" placeholder="Interface" aria-label="Interface" aria-describedby="basic-addon1"> |
||||
<select class="form-select" aria-label="Router"> |
||||
<option>rtr-somnj-dc01</option> |
||||
<option>rtr-somnj-dc02</option> |
||||
<option>rtr-halnj-dc01</option> |
||||
</select> |
||||
<button class="btn btn-outline-secondary" type="button" id="button-addon2">show iface</button> |
||||
</div> |
||||
<div class="form-floating"> |
||||
<textarea style="height: 300px" class="form-control" placeholder="Leave a comment here" id="floatingTextarea"> |
||||
description SOM_RCS-STG-BOSSDTC; |
||||
vlan-id 1061; |
||||
family inet { |
||||
filter { |
||||
output AT_SOM_RCS-STG-BOSSDTC_IN; |
||||
} |
||||
address 10.47.3.253/24 { |
||||
vrrp-group 100 { |
||||
virtual-address 10.47.3.254; |
||||
priority 250; |
||||
preempt; |
||||
accept-data; |
||||
} |
||||
} |
||||
} |
||||
</textarea> |
||||
<label for="floatingTextarea">rtr-somnj-dc01</label> |
||||
|
||||
</div> |
||||
|
||||
</div> |
||||
<div class="col"> |
||||
<div class="form-floating"> |
||||
<textarea style="height: 500px" class="form-control" placeholder="Leave a comment here" id="floatingTextarea"> |
||||
mgmt_junos.inet.0: 4 destinations, 5 routes (4 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
0.0.0.0/0 *[Static/5] 10:04:47 |
||||
> to 10.51.1.254 via fxp0.0 |
||||
CORP.inet.0: 159 destinations, 918 routes (159 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
0.0.0.0/0 *[OSPF/150] 10:00:55, metric 62, tag 0 |
||||
> to 10.248.1.194 via ae1.3904 |
||||
[BGP/170] 09:59:51, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 10.51.0.242 via et-11/1/2.1, Push 16 |
||||
[BGP/170] 10:00:02, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 16, Push 32(top) |
||||
to 10.51.0.242 via et-11/1/2.1, Push 16, Push 90(top) |
||||
[BGP/170] 09:55:37, MED 65, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 16 |
||||
[BGP/170] 09:54:37, MED 65, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 16 |
||||
[BGP/170] 09:54:39, MED 65, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 16 |
||||
GENIE.inet.0: 44 destinations, 223 routes (44 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
0.0.0.0/0 *[OSPF/150] 10:00:40, metric 103, tag 0 |
||||
> to 10.51.0.178 via xe-10/1/0.4022 |
||||
[BGP/170] 09:59:50, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 10.51.0.242 via et-11/1/2.1, Push 17 |
||||
[BGP/170] 09:55:29, MED 102, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 17 |
||||
[BGP/170] 09:54:36, MED 102, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 17 |
||||
[BGP/170] 09:54:39, MED 102, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 17 |
||||
[BGP/170] 09:59:40, MED 106, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 17, Push 32(top) |
||||
to 10.51.0.242 via et-11/1/2.1, Push 17, Push 90(top) |
||||
PRIVATE_NonProd.inet.0: 142 destinations, 739 routes (142 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
10.47.0.0/16 *[Static/5] 10:01:17, tag 100 |
||||
> to 10.51.0.33 via ae1.4006 |
||||
[BGP/170] 09:55:29, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 18 |
||||
[BGP/170] 09:54:36, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 18 |
||||
[BGP/170] 09:54:39, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 18 |
||||
PRIVATE_PROD.inet.0: 692 destinations, 4611 routes (692 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
10.47.3.0/24 *[Direct/0] 10:01:17 |
||||
> via ae1.1061 |
||||
[OSPF/150] 10:00:31, metric 0, tag 0 |
||||
> to 10.51.0.46 via xe-10/1/0.4007 |
||||
[BGP/170] 09:53:50, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 19 |
||||
[BGP/170] 09:54:36, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 19 |
||||
[BGP/170] 09:54:39, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 19 |
||||
PROD-PUBLIC.inet.0: 893692 destinations, 5748612 routes (893679 active, 1 holddown, 892904 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
10.47.0.0/16 *[Static/5] 10:01:17 |
||||
> to 216.53.104.254 via ae1.4012 |
||||
[OSPF/150] 10:00:31, metric 3, tag 0 |
||||
> to 10.51.0.70 via xe-10/1/0.4010 |
||||
[BGP/170] 09:57:29, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 20 |
||||
[BGP/170] 09:55:46, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 20 |
||||
[BGP/170] 09:55:58, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 20 |
||||
VOICE_NonProd-PUBLIC.inet.0: 29 destinations, 72 routes (29 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
10.47.0.0/16 *[Static/5] 10:01:17 |
||||
> to 10.51.0.9 via ae1.4003 |
||||
[BGP/170] 09:55:29, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 21 |
||||
[BGP/170] 09:54:36, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 21 |
||||
[BGP/170] 09:54:39, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 21 |
||||
</textarea> |
||||
<label for="floatingTextarea">rtr-somnj-dc01</label> |
||||
</div> |
||||
<div class="form-floating"> |
||||
<textarea style="height: 500px" class="form-control" placeholder="Leave a comment here" id="floatingTextarea"> |
||||
mgmt_junos.inet.0: 4 destinations, 5 routes (4 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
0.0.0.0/0 *[Static/5] 10:04:47 |
||||
> to 10.51.1.254 via fxp0.0 |
||||
CORP.inet.0: 159 destinations, 918 routes (159 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
0.0.0.0/0 *[OSPF/150] 10:00:55, metric 62, tag 0 |
||||
> to 10.248.1.194 via ae1.3904 |
||||
[BGP/170] 09:59:51, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 10.51.0.242 via et-11/1/2.1, Push 16 |
||||
[BGP/170] 10:00:02, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 16, Push 32(top) |
||||
to 10.51.0.242 via et-11/1/2.1, Push 16, Push 90(top) |
||||
[BGP/170] 09:55:37, MED 65, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 16 |
||||
[BGP/170] 09:54:37, MED 65, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 16 |
||||
[BGP/170] 09:54:39, MED 65, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 16 |
||||
GENIE.inet.0: 44 destinations, 223 routes (44 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
0.0.0.0/0 *[OSPF/150] 10:00:40, metric 103, tag 0 |
||||
> to 10.51.0.178 via xe-10/1/0.4022 |
||||
[BGP/170] 09:59:50, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 10.51.0.242 via et-11/1/2.1, Push 17 |
||||
[BGP/170] 09:55:29, MED 102, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 17 |
||||
[BGP/170] 09:54:36, MED 102, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 17 |
||||
[BGP/170] 09:54:39, MED 102, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 17 |
||||
[BGP/170] 09:59:40, MED 106, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 17, Push 32(top) |
||||
to 10.51.0.242 via et-11/1/2.1, Push 17, Push 90(top) |
||||
PRIVATE_NonProd.inet.0: 142 destinations, 739 routes (142 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
10.47.0.0/16 *[Static/5] 10:01:17, tag 100 |
||||
> to 10.51.0.33 via ae1.4006 |
||||
[BGP/170] 09:55:29, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 18 |
||||
[BGP/170] 09:54:36, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 18 |
||||
[BGP/170] 09:54:39, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 18 |
||||
PRIVATE_PROD.inet.0: 692 destinations, 4611 routes (692 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
10.47.3.0/24 *[Direct/0] 10:01:17 |
||||
> via ae1.1061 |
||||
[OSPF/150] 10:00:31, metric 0, tag 0 |
||||
> to 10.51.0.46 via xe-10/1/0.4007 |
||||
[BGP/170] 09:53:50, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 19 |
||||
[BGP/170] 09:54:36, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 19 |
||||
[BGP/170] 09:54:39, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 19 |
||||
PROD-PUBLIC.inet.0: 893692 destinations, 5748612 routes (893679 active, 1 holddown, 892904 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
10.47.0.0/16 *[Static/5] 10:01:17 |
||||
> to 216.53.104.254 via ae1.4012 |
||||
[OSPF/150] 10:00:31, metric 3, tag 0 |
||||
> to 10.51.0.70 via xe-10/1/0.4010 |
||||
[BGP/170] 09:57:29, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 20 |
||||
[BGP/170] 09:55:46, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 20 |
||||
[BGP/170] 09:55:58, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 20 |
||||
VOICE_NonProd-PUBLIC.inet.0: 29 destinations, 72 routes (29 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
10.47.0.0/16 *[Static/5] 10:01:17 |
||||
> to 10.51.0.9 via ae1.4003 |
||||
[BGP/170] 09:55:29, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 21 |
||||
[BGP/170] 09:54:36, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 21 |
||||
[BGP/170] 09:54:39, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 21 |
||||
</textarea> |
||||
<label for="floatingTextarea">rtr-somnj-dc02</label> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
|
||||
</script> |
||||
|
||||
{{ .Data }} |
||||
|
||||
{{end}} |
@ -0,0 +1,114 @@ |
||||
|
||||
{{define "title"}} |
||||
Protection | Shield |
||||
{{end}} |
||||
|
||||
{{define "body"}} |
||||
|
||||
<table class="table" id="Domains"> |
||||
<thead> |
||||
<tr> |
||||
<th scope="col">Domain</th> |
||||
<th scope="col">Server</th> |
||||
<th scope="col">Port</th> |
||||
<th scope="col">Stop Lists</th> |
||||
</tr> |
||||
</thead> |
||||
<tbody> |
||||
<tr> |
||||
<th scope="row">{{ .Domain.DomainName}}</th> |
||||
<td>{{ .Domain.RealServer}}</td> |
||||
<td>{{ .Domain.RealPort}}</td> |
||||
<td style="width: 500px;"> |
||||
<select class="form-select" aria-label="Default select example"> |
||||
<option selected>Known Attackers</option> |
||||
<option value="1">One</option> |
||||
<option value="2">Two</option> |
||||
<option value="3">Three</option> |
||||
</select> |
||||
</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
|
||||
<div class="row align-items-start"> |
||||
<div class="col" id="test"> |
||||
<div class="input-group mb-3"> |
||||
TEST 1 |
||||
</div> |
||||
<div class="input-group mb-3"> |
||||
TEST 2 |
||||
</div> |
||||
<div class="form-floating"> |
||||
TEST - 3 |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
<script type="text/javascript"> |
||||
/* |
||||
function AddDomain() { |
||||
$.ajax({ |
||||
url: "http://localhost:8080/api/domains", |
||||
type: "POST", |
||||
data: JSON.stringify({ |
||||
"DomainName": $("#Domain").val(), |
||||
"RealServer": $("#Server").val(), |
||||
"RealPort": $("#Port").val(), |
||||
}), |
||||
success: function(result) { |
||||
console.log("DONE!") |
||||
console.log(result) |
||||
} |
||||
}) |
||||
|
||||
} |
||||
|
||||
$.ajax({ |
||||
url: "http://localhost:8080/api/domains", |
||||
type: "GET", |
||||
data: JSON.stringify({ |
||||
}), |
||||
success: function(result) { |
||||
if (result == null) { |
||||
console.log("domain list is empty") |
||||
return |
||||
} |
||||
var content = '' |
||||
for (var i = 0; i<result.length; i++) { |
||||
content += '<th scope="row">' + i + "</th>" |
||||
content += '<tr>' |
||||
|
||||
content += '<td>' |
||||
content += result[i].DomainName |
||||
content += '</td>' |
||||
|
||||
content += '<td>' |
||||
content += result[i].RealServer |
||||
content += '</td>' |
||||
|
||||
content += '<td>' |
||||
content += result[i].RealPort |
||||
content += '</td>' |
||||
|
||||
content += '<td>' |
||||
content += '<a href="/api/domain/' + result[i].DomainName +'" type="button" class="btn btn-warning">Edit</a>' |
||||
content += '</td>' |
||||
|
||||
content += '</tr>' |
||||
|
||||
} |
||||
|
||||
$('#Domains tbody').html(content) |
||||
|
||||
console.log("DONE!") |
||||
} |
||||
}) |
||||
*/ |
||||
</script> |
||||
|
||||
{{ .Data }} |
||||
|
||||
{{end}} |
@ -0,0 +1,137 @@ |
||||
|
||||
{{define "title"}} |
||||
Protection | Shield |
||||
{{end}} |
||||
|
||||
{{define "body"}} |
||||
|
||||
<table class="table" id="Domains"> |
||||
<thead> |
||||
<tr> |
||||
<th scope="col">Domain</th> |
||||
<th scope="col">Server</th> |
||||
<th scope="col">Port</th> |
||||
<th scope="col">Action</th> |
||||
</tr> |
||||
</thead> |
||||
<tbody> |
||||
<tr> |
||||
<th scope="row">1</th> |
||||
<td>@domainname</td> |
||||
<td>@server</td> |
||||
<td>@port</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
|
||||
<div class="row align-items-start"> |
||||
<div class="col" id="test"> |
||||
<div class="input-group mb-3"> |
||||
TEST - 1 |
||||
</div> |
||||
<div class="input-group mb-3"> |
||||
TEST - 2 |
||||
</div> |
||||
<div class="form-floating"> |
||||
TEST - 3 |
||||
</div> |
||||
|
||||
</div> |
||||
<div class="col"> |
||||
<div class="form-floating"> |
||||
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#DomainAddModal"> |
||||
Add Domain |
||||
</button> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<!-- Modal --> |
||||
<div class="modal fade" id="DomainAddModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true"> |
||||
<div class="modal-dialog"> |
||||
<div class="modal-content"> |
||||
<div class="modal-header"> |
||||
<h5 class="modal-title" id="exampleModalLabel">New Domain</h5> |
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> |
||||
</div> |
||||
<div class="modal-body"> |
||||
<label for="inputEmail" class="sr-only">Domain Name</label> |
||||
<input type="text" id="Domain" name="Domain" class="form-control" placeholder="contoso.co" required autofocus> |
||||
<label for="inputEmail" class="sr-only">Server</label> |
||||
<input type="text" id="Server" name="Server" class="form-control" placeholder="FQDN or IP address" required> |
||||
<label for="inputEmail" class="sr-only">Port</label> |
||||
<input type="text" id="Port" name="Port" class="form-control" placeholder="443 or any other" required> |
||||
</div> |
||||
<div class="modal-footer"> |
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button> |
||||
<button type="button" class="btn btn-primary" onclick="AddDomain()">Save</button> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<script type="text/javascript"> |
||||
|
||||
function AddDomain() { |
||||
$.ajax({ |
||||
url: "http://localhost:8080/api/domains", |
||||
type: "POST", |
||||
data: JSON.stringify({ |
||||
"DomainName": $("#Domain").val(), |
||||
"RealServer": $("#Server").val(), |
||||
"RealPort": $("#Port").val(), |
||||
}), |
||||
success: function(result) { |
||||
console.log("DONE!") |
||||
console.log(result) |
||||
} |
||||
}) |
||||
|
||||
} |
||||
|
||||
$.ajax({ |
||||
url: "http://localhost:8080/api/domains", |
||||
type: "GET", |
||||
data: JSON.stringify({ |
||||
}), |
||||
success: function(result) { |
||||
if (result == null) { |
||||
console.log("domain list is empty") |
||||
return |
||||
} |
||||
var content = '' |
||||
for (var i = 0; i<result.length; i++) { |
||||
content += '<th scope="row">' + i + "</th>" |
||||
content += '<tr>' |
||||
|
||||
content += '<td>' |
||||
content += result[i].DomainName |
||||
content += '</td>' |
||||
|
||||
content += '<td>' |
||||
content += result[i].RealServer |
||||
content += '</td>' |
||||
|
||||
content += '<td>' |
||||
content += result[i].RealPort |
||||
content += '</td>' |
||||
|
||||
content += '<td>' |
||||
content += '<a href="/domain/' + result[i].DomainName +'" type="button" class="btn btn-warning">Edit</a>' |
||||
content += '</td>' |
||||
|
||||
content += '</tr>' |
||||
|
||||
} |
||||
|
||||
$('#Domains tbody').html(content) |
||||
|
||||
console.log("DONE!") |
||||
} |
||||
}) |
||||
|
||||
</script> |
||||
|
||||
{{ .Data }} |
||||
|
||||
{{end}} |
@ -1,30 +0,0 @@ |
||||
|
||||
{{define "title"}} |
||||
Protection | Shield |
||||
{{end}} |
||||
|
||||
{{define "body"}} |
||||
|
||||
<table class="table table-striped table-hover"> |
||||
<thead> |
||||
<tr> |
||||
<th scope="col">Domain</th> |
||||
<th scope="col">Real Server</th> |
||||
<th scope="col">Real Port</th> |
||||
<th scope="col">Status</th> |
||||
<th scope="col">Action</th> |
||||
<th scope="col"></th> |
||||
</tr> |
||||
</thead> |
||||
<tbody> |
||||
<tr scope="row"> |
||||
<td>Test</td> |
||||
<td>8.8.8.8</td> |
||||
<td>80</td> |
||||
<td>Onboarding</td> |
||||
<td><a class="btn btn-warning active" href="/protection/edit">Edit</a></td> |
||||
<td><a class="btn btn-danger active" href="/protection/delete">Delete</a></td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
{{end}} |
After Width: | Height: | Size: 5.7 KiB |
@ -0,0 +1,270 @@ |
||||
|
||||
{{define "title"}} |
||||
Protection | Shield |
||||
{{end}} |
||||
|
||||
{{define "body"}} |
||||
|
||||
<div class="row align-items-start"> |
||||
<div class="col"> |
||||
<div class="input-group mb-3"> |
||||
<span class="input-group-text" id="basic-addon1">Prefix</span> |
||||
<input type="text" class="form-control" placeholder="Prefix" aria-label="Prefix" aria-describedby="basic-addon1"> |
||||
<button class="btn btn-outline-secondary" type="button" id="button-addon2">show route</button> |
||||
</div> |
||||
<div class="input-group mb-3"> |
||||
<span class="input-group-text" id="basic-addon1">-Iface </span> |
||||
<input type="text" class="form-control" placeholder="Interface" aria-label="Interface" aria-describedby="basic-addon1"> |
||||
<select class="form-select" aria-label="Router"> |
||||
<option>rtr-somnj-dc01</option> |
||||
<option>rtr-somnj-dc02</option> |
||||
<option>rtr-halnj-dc01</option> |
||||
</select> |
||||
<button class="btn btn-outline-secondary" type="button" id="button-addon2">show iface</button> |
||||
</div> |
||||
<div class="form-floating"> |
||||
<textarea style="height: 300px" class="form-control" placeholder="Leave a comment here" id="floatingTextarea"> |
||||
description SOM_RCS-STG-BOSSDTC; |
||||
vlan-id 1061; |
||||
family inet { |
||||
filter { |
||||
output AT_SOM_RCS-STG-BOSSDTC_IN; |
||||
} |
||||
address 10.47.3.253/24 { |
||||
vrrp-group 100 { |
||||
virtual-address 10.47.3.254; |
||||
priority 250; |
||||
preempt; |
||||
accept-data; |
||||
} |
||||
} |
||||
} |
||||
</textarea> |
||||
<label for="floatingTextarea">rtr-somnj-dc01</label> |
||||
|
||||
</div> |
||||
|
||||
</div> |
||||
<div class="col"> |
||||
<div class="form-floating"> |
||||
<textarea style="height: 500px" class="form-control" placeholder="Leave a comment here" id="floatingTextarea"> |
||||
mgmt_junos.inet.0: 4 destinations, 5 routes (4 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
0.0.0.0/0 *[Static/5] 10:04:47 |
||||
> to 10.51.1.254 via fxp0.0 |
||||
CORP.inet.0: 159 destinations, 918 routes (159 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
0.0.0.0/0 *[OSPF/150] 10:00:55, metric 62, tag 0 |
||||
> to 10.248.1.194 via ae1.3904 |
||||
[BGP/170] 09:59:51, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 10.51.0.242 via et-11/1/2.1, Push 16 |
||||
[BGP/170] 10:00:02, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 16, Push 32(top) |
||||
to 10.51.0.242 via et-11/1/2.1, Push 16, Push 90(top) |
||||
[BGP/170] 09:55:37, MED 65, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 16 |
||||
[BGP/170] 09:54:37, MED 65, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 16 |
||||
[BGP/170] 09:54:39, MED 65, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 16 |
||||
GENIE.inet.0: 44 destinations, 223 routes (44 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
0.0.0.0/0 *[OSPF/150] 10:00:40, metric 103, tag 0 |
||||
> to 10.51.0.178 via xe-10/1/0.4022 |
||||
[BGP/170] 09:59:50, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 10.51.0.242 via et-11/1/2.1, Push 17 |
||||
[BGP/170] 09:55:29, MED 102, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 17 |
||||
[BGP/170] 09:54:36, MED 102, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 17 |
||||
[BGP/170] 09:54:39, MED 102, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 17 |
||||
[BGP/170] 09:59:40, MED 106, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 17, Push 32(top) |
||||
to 10.51.0.242 via et-11/1/2.1, Push 17, Push 90(top) |
||||
PRIVATE_NonProd.inet.0: 142 destinations, 739 routes (142 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
10.47.0.0/16 *[Static/5] 10:01:17, tag 100 |
||||
> to 10.51.0.33 via ae1.4006 |
||||
[BGP/170] 09:55:29, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 18 |
||||
[BGP/170] 09:54:36, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 18 |
||||
[BGP/170] 09:54:39, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 18 |
||||
PRIVATE_PROD.inet.0: 692 destinations, 4611 routes (692 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
10.47.3.0/24 *[Direct/0] 10:01:17 |
||||
> via ae1.1061 |
||||
[OSPF/150] 10:00:31, metric 0, tag 0 |
||||
> to 10.51.0.46 via xe-10/1/0.4007 |
||||
[BGP/170] 09:53:50, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 19 |
||||
[BGP/170] 09:54:36, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 19 |
||||
[BGP/170] 09:54:39, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 19 |
||||
PROD-PUBLIC.inet.0: 893692 destinations, 5748612 routes (893679 active, 1 holddown, 892904 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
10.47.0.0/16 *[Static/5] 10:01:17 |
||||
> to 216.53.104.254 via ae1.4012 |
||||
[OSPF/150] 10:00:31, metric 3, tag 0 |
||||
> to 10.51.0.70 via xe-10/1/0.4010 |
||||
[BGP/170] 09:57:29, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 20 |
||||
[BGP/170] 09:55:46, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 20 |
||||
[BGP/170] 09:55:58, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 20 |
||||
VOICE_NonProd-PUBLIC.inet.0: 29 destinations, 72 routes (29 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
10.47.0.0/16 *[Static/5] 10:01:17 |
||||
> to 10.51.0.9 via ae1.4003 |
||||
[BGP/170] 09:55:29, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 21 |
||||
[BGP/170] 09:54:36, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 21 |
||||
[BGP/170] 09:54:39, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 21 |
||||
</textarea> |
||||
<label for="floatingTextarea">rtr-somnj-dc01</label> |
||||
</div> |
||||
<div class="form-floating"> |
||||
<textarea style="height: 500px" class="form-control" placeholder="Leave a comment here" id="floatingTextarea"> |
||||
mgmt_junos.inet.0: 4 destinations, 5 routes (4 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
0.0.0.0/0 *[Static/5] 10:04:47 |
||||
> to 10.51.1.254 via fxp0.0 |
||||
CORP.inet.0: 159 destinations, 918 routes (159 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
0.0.0.0/0 *[OSPF/150] 10:00:55, metric 62, tag 0 |
||||
> to 10.248.1.194 via ae1.3904 |
||||
[BGP/170] 09:59:51, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 10.51.0.242 via et-11/1/2.1, Push 16 |
||||
[BGP/170] 10:00:02, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 16, Push 32(top) |
||||
to 10.51.0.242 via et-11/1/2.1, Push 16, Push 90(top) |
||||
[BGP/170] 09:55:37, MED 65, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 16 |
||||
[BGP/170] 09:54:37, MED 65, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 16 |
||||
[BGP/170] 09:54:39, MED 65, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 16 |
||||
GENIE.inet.0: 44 destinations, 223 routes (44 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
0.0.0.0/0 *[OSPF/150] 10:00:40, metric 103, tag 0 |
||||
> to 10.51.0.178 via xe-10/1/0.4022 |
||||
[BGP/170] 09:59:50, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 10.51.0.242 via et-11/1/2.1, Push 17 |
||||
[BGP/170] 09:55:29, MED 102, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 17 |
||||
[BGP/170] 09:54:36, MED 102, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 17 |
||||
[BGP/170] 09:54:39, MED 102, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 17 |
||||
[BGP/170] 09:59:40, MED 106, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 17, Push 32(top) |
||||
to 10.51.0.242 via et-11/1/2.1, Push 17, Push 90(top) |
||||
PRIVATE_NonProd.inet.0: 142 destinations, 739 routes (142 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
10.47.0.0/16 *[Static/5] 10:01:17, tag 100 |
||||
> to 10.51.0.33 via ae1.4006 |
||||
[BGP/170] 09:55:29, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 18 |
||||
[BGP/170] 09:54:36, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 18 |
||||
[BGP/170] 09:54:39, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 18 |
||||
PRIVATE_PROD.inet.0: 692 destinations, 4611 routes (692 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
10.47.3.0/24 *[Direct/0] 10:01:17 |
||||
> via ae1.1061 |
||||
[OSPF/150] 10:00:31, metric 0, tag 0 |
||||
> to 10.51.0.46 via xe-10/1/0.4007 |
||||
[BGP/170] 09:53:50, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 19 |
||||
[BGP/170] 09:54:36, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 19 |
||||
[BGP/170] 09:54:39, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 19 |
||||
PROD-PUBLIC.inet.0: 893692 destinations, 5748612 routes (893679 active, 1 holddown, 892904 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
10.47.0.0/16 *[Static/5] 10:01:17 |
||||
> to 216.53.104.254 via ae1.4012 |
||||
[OSPF/150] 10:00:31, metric 3, tag 0 |
||||
> to 10.51.0.70 via xe-10/1/0.4010 |
||||
[BGP/170] 09:57:29, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 20 |
||||
[BGP/170] 09:55:46, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 20 |
||||
[BGP/170] 09:55:58, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 20 |
||||
VOICE_NonProd-PUBLIC.inet.0: 29 destinations, 72 routes (29 active, 0 holddown, 0 hidden) |
||||
+ = Active Route, - = Last Active, * = Both |
||||
10.47.0.0/16 *[Static/5] 10:01:17 |
||||
> to 10.51.0.9 via ae1.4003 |
||||
[BGP/170] 09:55:29, localpref 100, from 216.53.0.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 21 |
||||
[BGP/170] 09:54:36, localpref 100, from 216.53.65.1 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 21 |
||||
[BGP/170] 09:54:39, localpref 100, from 216.53.65.2 |
||||
AS path: I, validation-state: unverified |
||||
> to 216.53.55.2 via ae0.1, Push 21 |
||||
</textarea> |
||||
<label for="floatingTextarea">rtr-somnj-dc02</label> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
|
||||
<script type="text/javascript"> |
||||
|
||||
</script> |
||||
|
||||
{{ .Data }} |
||||
|
||||
{{end}} |
Loading…
Reference in new issue