12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- package main
- import (
- "fmt"
- "io"
- "net"
- "os"
- )
- // Proxy struct to hold connection data
- type Proxy struct {
- Conn *net.TCPConn
- Addr *net.TCPAddr
- err error
- }
- func (p *Proxy) SetAddrAndPort(ip string, port int) {
- address := fmt.Sprintf("%s:%d", ip, port)
- p.Addr, p.err = net.ResolveTCPAddr("tcp4", address)
- p.CheckError()
- }
- // OpenConnection opens dials the tcp connection
- func (p *Proxy) OpenConnection() {
- p.Conn, p.err = net.DialTCP("tcp4", nil, p.Addr)
- p.CheckError()
- }
- func (p *Proxy) WriteBytes(ch chan []byte) {
- select {
- case d := <-ch:
- p.Conn.Write(d)
- }
- p.CheckError()
- }
- func (p *Proxy) ReadAll(ch chan []byte) {
- data := make([]byte, 0, 16384)
- tmp := make([]byte, 256)
- for {
- size, err := p.Conn.Read(tmp)
- if err != nil {
- if err == io.EOF {
- break
- }
- fmt.Printf("\n\n\n### Error on read %v", err)
- os.Exit(1)
- }
- data = append(data, tmp[:size]...)
- if size < 256 {
- ch <- data
- }
- }
- p.CheckError()
- }
- func (p *Proxy) CheckError() {
- if p.err != nil {
- fmt.Println(p.err)
- os.Exit(1)
- }
- }
- func NewProxy() *Proxy {
- return &Proxy{}
- }
- func ReplaceNonPrintable(data []byte) []byte {
- for i, b := range data {
- if (b < 32 && b != 13 && b != 10) || b > 127 {
- data[i] = 0
- }
- }
- return data
- }
|