├── VERSION ├── pkgs ├── deb │ ├── after-install │ ├── before-remove │ ├── default │ │ └── traproxy │ └── upstart │ │ └── traproxy └── Makefile ├── diagram.png ├── diagram.monopic ├── .gitignore ├── version.go ├── release_build.sh ├── .travis.yml ├── orgdst ├── orgdst.go ├── orgdst_linux.go └── orgdst_darwin.go ├── Vagrantfile ├── firewall ├── firewall_test.go ├── iptables_test.go ├── pf.go ├── iptables.go └── firewall.go ├── CHANGELOG.md ├── README.md ├── Makefile ├── wercker.yml ├── translator.go ├── translator_https.go ├── util.go ├── translator_http.go ├── LICENSE.md ├── translator_http_test.go ├── translator_test.go ├── util_test.go ├── http ├── request.go └── request_test.go ├── translator_https_test.go └── traproxy └── main.go /VERSION: -------------------------------------------------------------------------------- 1 | v0.1.7 2 | -------------------------------------------------------------------------------- /pkgs/deb/after-install: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | start traproxy 3 | -------------------------------------------------------------------------------- /diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nyushi/traproxy/HEAD/diagram.png -------------------------------------------------------------------------------- /diagram.monopic: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nyushi/traproxy/HEAD/diagram.monopic -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | traproxy/traproxy 2 | traproxy/*.tar.gz 3 | *coverage.out 4 | **/*.test 5 | .vagrant 6 | -------------------------------------------------------------------------------- /pkgs/deb/before-remove: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | status traproxy | grep -q "^traproxy start" > /dev/null 3 | [ $? -eq 0 ] && stop traproxy 4 | -------------------------------------------------------------------------------- /version.go: -------------------------------------------------------------------------------- 1 | package traproxy 2 | 3 | var ( 4 | // Version is traproxy version 5 | Version string 6 | // GitHash is git revision of traproxy 7 | GitHash string 8 | ) 9 | -------------------------------------------------------------------------------- /release_build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -x 2 | 3 | cd traproxy 4 | export GOOS=linux 5 | for arch in amd64 386 arm; do 6 | GOARCH=$arch go build 7 | tar zcf "traproxy_linux_${arch}.tar.gz" traproxy 8 | rm -f traproxy 9 | done 10 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: go 2 | go: 3 | - 1.5 4 | - tip 5 | before_install: 6 | - go get github.com/mattn/goveralls 7 | - go get golang.org/x/tools/cmd/cover 8 | script: 9 | - make test-cov 10 | - $HOME/gopath/bin/goveralls -coverprofile=coverage.out -repotoken $COVERALL_TOKEN || true 11 | -------------------------------------------------------------------------------- /pkgs/deb/default/traproxy: -------------------------------------------------------------------------------- 1 | # traproxy Upstart and SysVinit configuration file 2 | 3 | # Customize location of traproxy binary (especially for development testing). 4 | #TRAPROXY="/usr/sbin/traproxy" 5 | 6 | # Use TRAPROXY_OPTS to modify the daemon startup options. 7 | #TRAPROXY_OPTS="-proxyaddr=192.168.0.1:8080 -with-docker" 8 | -------------------------------------------------------------------------------- /pkgs/deb/upstart/traproxy: -------------------------------------------------------------------------------- 1 | description "traproxy" 2 | 3 | start on filesystem 4 | stop on runlevel [!2345] 5 | 6 | respawn 7 | 8 | script 9 | TRAPROXY=/usr/sbin/$UPSTART_JOB 10 | TRAPROXY_OPTS= 11 | if [ -f /etc/default/$UPSTART_JOB ]; then 12 | . /etc/default/$UPSTART_JOB 13 | fi 14 | "$TRAPROXY" $TRAPROXY_OPTS 15 | end script 16 | -------------------------------------------------------------------------------- /pkgs/Makefile: -------------------------------------------------------------------------------- 1 | VERSION=$(shell cat ../VERSION) 2 | 3 | DEB_ARCH=$(shell dpkg-architecture -qDEB_BUILD_ARCH) 4 | DPKG=traproxy_$(VERSION)_$(DEB_ARCH).deb 5 | 6 | $(DPKG): 7 | mkdir -p root/usr/sbin 8 | cp ../traproxy/traproxy ./root/usr/sbin 9 | 10 | fpm -n traproxy -s dir -t deb -v $(VERSION) --after-install deb/after-install --before-remove deb/before-remove --deb-default ./deb/default/traproxy --deb-upstart ./deb/upstart/traproxy -C root usr 11 | 12 | clean: 13 | rm -rf $(DPKG) ./root 14 | 15 | .PHONY: dpkg 16 | -------------------------------------------------------------------------------- /orgdst/orgdst.go: -------------------------------------------------------------------------------- 1 | package orgdst 2 | 3 | import ( 4 | "net" 5 | ) 6 | 7 | func itod(i uint) string { 8 | if i == 0 { 9 | return "0" 10 | } 11 | 12 | // Assemble decimal in reverse order. 13 | var b [32]byte 14 | bp := len(b) 15 | for ; i > 0; i /= 10 { 16 | bp-- 17 | b[bp] = byte(i%10) + '0' 18 | } 19 | 20 | return string(b[bp:]) 21 | } 22 | 23 | func zoneToString(zone int) string { 24 | if zone == 0 { 25 | return "" 26 | } 27 | if ifi, err := net.InterfaceByIndex(zone); err == nil { 28 | return ifi.Name 29 | } 30 | return itod(uint(zone)) 31 | } 32 | -------------------------------------------------------------------------------- /Vagrantfile: -------------------------------------------------------------------------------- 1 | # -*- mode: ruby -*- 2 | # vi: set ft=ruby : 3 | 4 | # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! 5 | VAGRANTFILE_API_VERSION = "2" 6 | 7 | Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 8 | config.vm.box = "precise64" 9 | config.vm.provider :vmware_fusion do |v| 10 | v.vmx['memsize'] = 256 11 | end 12 | 13 | script = <