Skip to content

Commit 26a7ed9

Browse files
committed
Add ssl-multicast-sources
1 parent 624be3b commit 26a7ed9

File tree

4 files changed

+84
-2
lines changed

4 files changed

+84
-2
lines changed

.circleci/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ version: 2.1
22
parameters:
33
cmds:
44
type: string
5-
default: "ssl-auto-recorder ssl-log-converter ssl-log-cutter ssl-log-indexer ssl-log-player ssl-log-recorder ssl-log-stats ssl-vision-tracker-client"
5+
default: "ssl-auto-recorder ssl-log-converter ssl-log-cutter ssl-log-indexer ssl-log-player ssl-log-recorder ssl-log-stats ssl-vision-tracker-client ssl-multicast-sources"
66

77
jobs:
88
test_go:

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
CMDS = ssl-auto-recorder ssl-log-converter ssl-log-cutter ssl-log-indexer ssl-log-player ssl-log-recorder ssl-log-stats ssl-vision-tracker-client
1+
CMDS = ssl-auto-recorder ssl-log-converter ssl-log-cutter ssl-log-indexer ssl-log-player ssl-log-recorder ssl-log-stats ssl-vision-tracker-client ssl-multicast-sources
22
DOCKER_TARGETS = $(addprefix docker-, $(CMDS))
33
.PHONY: all docker test install proto $(DOCKER_TARGETS)
44

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# ssl-multicast-sources
2+
3+
Detect IPs of multicast message producers for debugging purposes.
4+
By default, it looks for all multicast groups and ports that are used by default in the SSL.
5+
6+
## Usage
7+
8+
The binary is called `ssl-multicast-sources`.
9+
Pass custom multicast IPs/ports like this:
10+
11+
```shell
12+
ssl-multicast-sources 224.5.23.1:10003 224.5.23.2:10006
13+
```

cmd/ssl-multicast-sources/main.go

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package main
2+
3+
import (
4+
"flag"
5+
"log"
6+
"net"
7+
"time"
8+
)
9+
10+
const maxDatagramSize = 8192
11+
12+
var detectedRemotes map[string][]string
13+
14+
func main() {
15+
flag.Parse()
16+
17+
detectedRemotes = map[string][]string{}
18+
mcAddresses := flag.Args()
19+
if len(mcAddresses) == 0 {
20+
mcAddresses = []string{"224.5.23.1:10003", "224.5.23.2:10006", "224.5.23.2:10010", "224.5.23.2:10012"}
21+
}
22+
23+
for _, address := range mcAddresses {
24+
go watchAddress(address)
25+
}
26+
27+
for {
28+
time.Sleep(1 * time.Second)
29+
}
30+
}
31+
32+
func watchAddress(address string) {
33+
addr, err := net.ResolveUDPAddr("udp", address)
34+
if err != nil {
35+
log.Fatal(err)
36+
}
37+
conn, err := net.ListenMulticastUDP("udp", nil, addr)
38+
if err != nil {
39+
log.Fatal(err)
40+
}
41+
if err := conn.SetReadBuffer(maxDatagramSize); err != nil {
42+
log.Printf("Could not set read buffer to %v.", maxDatagramSize)
43+
}
44+
log.Println("Receiving from", address)
45+
for {
46+
_, udpAddr, err := conn.ReadFromUDP([]byte{0})
47+
if err != nil {
48+
log.Print("Could not read: ", err)
49+
time.Sleep(1 * time.Second)
50+
continue
51+
}
52+
addRemote(address, udpAddr.IP.String())
53+
}
54+
}
55+
56+
func addRemote(address string, remote string) {
57+
remotes, ok := detectedRemotes[address]
58+
if !ok {
59+
detectedRemotes[address] = []string{}
60+
}
61+
for _, a := range remotes {
62+
if a == remote {
63+
return
64+
}
65+
}
66+
67+
detectedRemotes[address] = append(detectedRemotes[address], remote)
68+
log.Printf("remote ip on %v: %v\n", address, remote)
69+
}

0 commit comments

Comments
 (0)