Skip to content

Instantly share code, notes, and snippets.

@mkozjak
Created November 11, 2014 12:06
Show Gist options
  • Save mkozjak/0256c74c872780efb243 to your computer and use it in GitHub Desktop.
Save mkozjak/0256c74c872780efb243 to your computer and use it in GitHub Desktop.
package main
import (
_ "code.google.com/p/gcfg"
"code.google.com/p/go.net/ipv4"
_ "encoding/json"
"fmt"
_ "io/ioutil"
"net"
_ "net/http"
"os"
"strconv"
_ "time"
)
func main() {
iface, err := net.InterfaceByName("eth0")
if err != nil {
fmt.Println("net.InterfaceByName failed")
return
}
mcast := "232.50.100.1"
port := "3001"
b1, _ := strconv.Atoi(mcast[0:3])
b2, _ := strconv.Atoi(mcast[4:6])
b3, _ := strconv.Atoi(mcast[7:10])
b4, _ := strconv.Atoi(mcast[11:])
group := net.IPv4(byte(b1), byte(b2), byte(b3), byte(b4))
localSock, err := net.ListenPacket("udp4", mcast+":"+port)
if err != nil {
fmt.Println("net.ListenPacket failed")
return
}
defer localSock.Close()
pktSock := ipv4.NewPacketConn(localSock)
if err := pktSock.SetControlMessage(ipv4.FlagDst, true); err != nil {
fmt.Println("pktSock.SetControlMessage failed")
return
}
if err := pktSock.JoinGroup(iface, &net.UDPAddr{IP: group}); err != nil {
fmt.Println("Failed to join mcast!")
return
}
file, err := os.OpenFile("/home/mkozjak/file", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0600)
if err != nil {
fmt.Println("error opening file for appending")
}
defer file.Close()
pktSock.SetMulticastInterface(iface)
for {
pkt := make([]byte, 1500)
n, cmsg, _, err := pktSock.ReadFrom(pkt)
if err != nil {
fmt.Println("pktSock.ReadFrom failed")
return
}
// Check if created packet buffer is too large and slice it if needed
if len(pkt) > n {
newPkt := make([]byte, n)
copy(newPkt, pkt)
pkt = newPkt
}
// Slice off udp header
pkt = pkt[12:]
// Store file
if cmsg.Dst.IsMulticast() {
if cmsg.Dst.Equal(group) {
_, err := file.Write(pkt)
if err != nil {
fmt.Println("error writing to file")
return
}
} else {
continue
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment