Skip to content

Commit 17eb9eb

Browse files
Minor fixes
1 parent 46fd4e9 commit 17eb9eb

File tree

4 files changed

+47
-22
lines changed

4 files changed

+47
-22
lines changed

api.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ export interface MtrPEntry {
9898

9999
export interface MtrP {
100100
resolved: string; // ip selected to mtr
101-
data: MtrPEntry[][] | null;
101+
data: (MtrPEntry[] | null)[];
102102
}
103103

104104

icmp/icmp.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,11 @@ type ICMPManager struct {
128128
ctx context.Context
129129
// function to call to stop the manager
130130
cancel context.CancelFunc
131-
// icmp packet conn of related network
131+
// icmp packet conn and mutex of related network
132132
pConn4 *icmp.PacketConn
133+
lc4 sync.Mutex
133134
pConn6 *icmp.PacketConn
135+
lc6 sync.Mutex
134136
}
135137

136138
var manager *ICMPManager
@@ -425,15 +427,19 @@ func (mgr *ICMPManager) Issue(ip net.Addr, ttl int, timeout time.Duration) (deli
425427
}, timeout)
426428

427429
if v4 {
430+
mgr.lc4.Lock()
428431
if err := mgr.pConn4.IPv4PacketConn().SetTTL(ttl); err != nil {
429432
return nil
430433
}
431434
_, _ = mgr.pConn4.WriteTo(msg, ipAddr)
435+
mgr.lc4.Unlock()
432436
} else {
437+
mgr.lc6.Lock()
433438
if err := mgr.pConn6.IPv6PacketConn().SetHopLimit(ttl); err != nil {
434439
return nil
435440
}
436441
_, _ = mgr.pConn6.WriteTo(msg, ipAddr)
442+
mgr.lc6.Unlock()
437443
}
438444

439445
return

main.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,15 @@ func jsonResult(c *gin.Context, r interface{}, e error) {
5050

5151
func verifyStamp(c *gin.Context, timeStamp, nonce uint64) bool {
5252
if time.Since(time.Unix(int64(timeStamp), 0)) > 60*time.Second {
53-
c.AbortWithStatus(http.StatusUnauthorized)
53+
c.String(http.StatusUnauthorized, "Stamp timeout")
54+
c.Abort()
5455
return false
5556
}
5657

5758
nonceString := strconv.FormatUint(nonce, 16)
5859
if _, err := nonceMap.Get(nonceString); err != ttlcache.ErrNotFound {
59-
c.AbortWithStatus(http.StatusUnauthorized)
60+
c.String(http.StatusUnauthorized, "Nonce already used")
61+
c.Abort()
6062
return false
6163
}
6264

@@ -174,12 +176,16 @@ func verify(c *gin.Context) {
174176
sign := c.GetHeader("X-Signature")
175177
hexSign, err := hex.DecodeString(sign)
176178
if sign == "" || err != nil {
177-
c.AbortWithStatus(http.StatusUnauthorized)
179+
c.String(http.StatusUnauthorized, "Missing signature")
180+
c.Abort()
178181
return
179182
}
180183

181-
if !hmac.Equal(hexSign, h.Sum(body)) {
182-
c.AbortWithStatus(http.StatusUnauthorized)
184+
h.Write(body)
185+
186+
if !hmac.Equal(hexSign, h.Sum(nil)) {
187+
c.String(http.StatusUnauthorized, "Invalid signature")
188+
c.Abort()
183189
return
184190
}
185191

@@ -191,7 +197,8 @@ func limit(enable bool) gin.HandlerFunc {
191197
if enable {
192198
c.Next()
193199
} else {
194-
c.AbortWithStatus(http.StatusForbidden)
200+
c.String(http.StatusForbidden, "API not enabled")
201+
c.Abort()
195202
return
196203
}
197204
}

mtr.go

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package main
22

33
import (
4-
"fmt"
54
lru "github.com/hashicorp/golang-lru"
65
"net"
76
"network-measure/icmp"
@@ -42,6 +41,7 @@ func rDNSLookup(ip string) string {
4241
}
4342

4443
type MTRResult struct {
44+
Probe uint64
4545
Hop uint64
4646
Result *icmp.Result
4747
}
@@ -79,26 +79,34 @@ func mtr(q *MtrQ) (*MtrP, error) {
7979

8080
r := MtrP{
8181
Resolved: addr.String(),
82-
Data: make([][]MtrPEntry, q.MaxHop),
82+
Data: make([][]MtrPEntry, q.Times),
83+
}
84+
85+
for i := uint64(0); i < q.Times; i++ {
86+
r.Data[i] = make([]MtrPEntry, q.MaxHop)
8387
}
8488

8589
resultPipe := make(chan MTRResult)
90+
finishPipe := make(chan struct{})
8691
go func() {
8792
for result := range resultPipe {
88-
if result.Result.Code == 256 {
89-
continue
90-
}
93+
ip := result.Result.AddrIP.String()
9194

92-
fmt.Printf("{%d}, {%+v}\n", result.Hop, *result.Result)
95+
entry := &r.Data[result.Probe][result.Hop]
96+
entry.Code = result.Result.Code
97+
if entry.Code != 256 {
98+
entry.Address = ip
99+
entry.RDNS = rDNSLookup(ip)
100+
entry.Latency = float64(result.Result.Latency) / float64(time.Millisecond)
101+
}
93102

94-
ip := result.Result.AddrIP.String()
95-
r.Data[result.Hop] = append(r.Data[result.Hop], MtrPEntry{
96-
Address: ip,
97-
RDNS: rDNSLookup(ip),
98-
Code: result.Result.Code,
99-
Latency: float64(result.Result.Latency) / float64(time.Millisecond),
100-
})
103+
if entry.Code != 258 && entry.Code != 256 {
104+
r.Data[result.Probe] = r.Data[result.Probe][:result.Hop+1]
105+
}
101106
}
107+
108+
finishPipe <- struct{}{}
109+
close(finishPipe)
102110
}()
103111

104112
m := icmp.GetICMPManager()
@@ -115,9 +123,11 @@ func mtr(q *MtrQ) (*MtrP, error) {
115123

116124
countTimes++
117125
go func() {
126+
thisCount := countTimes - 1
118127
for i := uint64(0); i < q.MaxHop; i++ {
119128
result := <-m.Issue(addr, int(i), timeout)
120129
resultPipe <- MTRResult{
130+
Probe: thisCount,
121131
Hop: i,
122132
Result: result,
123133
}
@@ -132,7 +142,9 @@ func mtr(q *MtrQ) (*MtrP, error) {
132142
}
133143

134144
times.Wait()
135-
for r.Data[len(r.Data)-1] == nil {
145+
close(resultPipe)
146+
<-finishPipe
147+
for len(r.Data) != 0 && r.Data[len(r.Data)-1] == nil {
136148
r.Data = r.Data[:len(r.Data)-1]
137149
}
138150
return &r, nil

0 commit comments

Comments
 (0)