diff --git a/proxy/main.go b/proxy/main.go index bbc496c..e47b636 100644 --- a/proxy/main.go +++ b/proxy/main.go @@ -10,6 +10,7 @@ import ( log "github.com/sirupsen/logrus" "io" "net" + "os" "proxy/cmd" "proxy/util" "time" @@ -30,6 +31,8 @@ func main() { newmac := flag.String("newmac", "52:54:00:12:34:aa", "MAC after change") passthrough := flag.Bool("passthrough", false, "Whether to pass every traffic through") proxy := flag.String("proxy", "1", "Number of the proxy switch") + pidfile := flag.String("pidfile", "", "Location to write the pid to") + logfile := flag.String("logfile", "", "Location to write output to") flag.Parse() log.SetLevel(log.Level(*logLvl)) OldMac, _ = net.ParseMAC(*oldmac) @@ -39,6 +42,14 @@ func main() { log.SetFormatter(&log.TextFormatter{ DisableTimestamp: true, }) + if *logfile != "" { + if f, err := os.OpenFile(*logfile, os.O_WRONLY | os.O_CREATE, 0755); err != nil { + log.Error("Error opening logfile ", *logfile) + } else { + log.SetOutput(f) + } + } + util.WritePIDFile(*pidfile) c1 := cmd.New("vde_plug", "/run/vde/sw_main.sock") c2 := cmd.New("vde_plug", "/run/vde/sw_proxy"+*proxy+".sock") c1.Execute() diff --git a/proxy/proxy b/proxy/proxy index 75cd6eb..ea63b39 100755 Binary files a/proxy/proxy and b/proxy/proxy differ diff --git a/proxy/util/util.go b/proxy/util/util.go index 725bc13..2f50e28 100644 --- a/proxy/util/util.go +++ b/proxy/util/util.go @@ -7,6 +7,7 @@ import ( log "github.com/sirupsen/logrus" "io/ioutil" "os" + "strconv" ) // WritePcap writes the provided data to a given pcap file @@ -31,4 +32,13 @@ func WriteBinary(file string, data []byte) { if err := ioutil.WriteFile(file, data, 0644); err != nil { log.Errorf("Error writing binary file %s", file) } +} + +func WritePIDFile(filename string) { + if filename == "" { + return + } + if err := ioutil.WriteFile(filename, []byte(strconv.Itoa(os.Getpid())), 0644); err != nil { + log.Errorf("Error writing PID file %s", filename) + } } \ No newline at end of file diff --git a/test-env/envctl b/test-env/envctl index a2d8e7a..a6e89e9 100755 --- a/test-env/envctl +++ b/test-env/envctl @@ -2,6 +2,7 @@ # QEMU/VDE network environment preparation script RUN='/run/vde' qemu=/opt/qemu/build/qemu-system-x86_64 +proxy=`dirname "$(readlink -f "$0")"`/../proxy/proxy # PID identifiers all="$RUN/*.pid" @@ -11,6 +12,9 @@ alpine="$RUN/vm_alpine_*.pid" alpine1="$RUN/vm_alpine_1.pid" alpine2="$RUN/vm_alpine_2.pid" kali="$RUN/vm_kali.pid" +proxy2="$RUN/proxy_2.pid" +proxy3="$RUN/proxy_3.pid" +proxies="$RUN/proxy_*.pid" case "$1" in @@ -26,13 +30,19 @@ start) slirpvde -D -H 10.0.0.2 --daemon -s $RUN/sw_main.sock -p $RUN/net_slirp.pid ;;& alpine1 | alpine | vms | all) - $qemu -m 512 -nic vde,mac='52:54:00:12:34:56',sock=$RUN/sw_proxy1.sock -hda alpine1.qcow2 -daemonize -vnc :1 -pidfile $RUN/vm_alpine_1.pid + $qemu -m 512 -nic vde,mac='52:54:00:12:34:56',sock=$RUN/sw_proxy1.sock -hda alpine1.qcow2 -daemonize -vnc :1 -pidfile $alpine1 ;;& alpine2 | alpine | vms | all) - $qemu -m 512 -nic vde,mac='52:54:00:12:34:66',sock=$RUN/sw_proxy2.sock -hda alpine2.qcow2 -daemonize -vnc :2 -pidfile $RUN/vm_alpine_2.pid + $qemu -m 512 -nic vde,mac='52:54:00:12:34:66',sock=$RUN/sw_proxy2.sock -hda alpine2.qcow2 -daemonize -vnc :2 -pidfile $alpine2 ;;& kali | vms | all) - $qemu -m 1024 -nic user -nic vde,mac='52:54:00:12:34:76',sock=$RUN/sw_proxy3.sock -hda kali.qcow2 -daemonize -vnc :3 -pidfile $RUN/vm_kali.pid + $qemu -m 1024 -nic user -nic vde,mac='52:54:00:12:34:76',sock=$RUN/sw_proxy3.sock -hda kali.qcow2 -daemonize -vnc :3 -pidfile $kali + ;;& + proxy2 | proxies | all) + $proxy -proxy 2 -passthrough -logfile $RUN/proxy_2.log -pidfile $proxy2 & + ;;& + proxy3 | proxies | all) + $proxy -proxy 3 -passthrough -logfile $RUN/proxy_3.log -pidfile $proxy3 & ;; *) echo "Usage: envctl start {all|network|vms|alpine|alpine1|alpine2|kali}"