Created
April 22, 2018 00:35
-
-
Save OneOfOne/5368f638f7df1035862659a7bec6ca2f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"log" | |
"os" | |
"os/exec" | |
"golang.org/x/net/ipv4" | |
"github.com/songgao/water" | |
) | |
const ( | |
// I use TUN interface, so only plain IP packet, no ethernet header + mtu is set to 1300 | |
BUFFERSIZE = 1600 | |
MTU = "1300" | |
) | |
func main() { | |
iface, err := water.New(water.Config{}) | |
fatalIf(err) | |
log.Printf("tun interface: %s", iface.Name()) | |
runBin("/bin/ip", "link", "set", "dev", iface.Name(), "mtu", MTU) | |
runBin("/bin/ip", "addr", "add", "10.2.0.10/24", "dev", iface.Name()) | |
runBin("/bin/ip", "link", "set", "dev", iface.Name(), "up") | |
buf := make([]byte, BUFFERSIZE) | |
for { | |
n, err := iface.Read(buf) | |
if err != nil { | |
log.Fatal(err) | |
} | |
header, _ := ipv4.ParseHeader(buf[:n]) | |
log.Printf("isTCP: %v, header: %s", header.Protocol == 6, header) | |
} | |
} | |
func fatalIf(err error) { | |
if err != nil { | |
log.Fatal(err) | |
} | |
} | |
func runBin(bin string, args ...string) { | |
cmd := exec.Command(bin, args...) | |
cmd.Stderr = os.Stderr | |
cmd.Stdout = os.Stdout | |
cmd.Stdin = os.Stdin | |
fatalIf(cmd.Run()) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Of course, there's nothing confidential. I can simplify the server code and send it to you, but you have to wait a few hours because I'm busy with something else now. 😊