This commit is contained in:
nadoo 2018-11-21 20:28:46 +08:00
parent 266578d67d
commit 2813e80a98
4 changed files with 17 additions and 17 deletions

View File

@ -16,7 +16,8 @@ checkduration=30
dnsserver=208.67.222.222:53 dnsserver=208.67.222.222:53
# specify destinations # specify destinations
#include=office.list include=office.list
domain=example1.com domain=example1.com
domain=example2.com domain=example2.com
# matches ip # matches ip

View File

@ -162,8 +162,8 @@ func (s *HTTP) Serve(c net.Conn) {
uri := u.String() uri := u.String()
var reqBuf bytes.Buffer var reqBuf bytes.Buffer
writeFirstLine(method, uri, proto, &reqBuf) writeFirstLine(&reqBuf, method, uri, proto)
writeHeaders(reqHeader, &reqBuf) writeHeaders(&reqBuf, reqHeader)
// send request to remote server // send request to remote server
rc.Write(reqBuf.Bytes()) rc.Write(reqBuf.Bytes())
@ -194,8 +194,8 @@ func (s *HTTP) Serve(c net.Conn) {
respHeader.Set("Connection", "close") respHeader.Set("Connection", "close")
var respBuf bytes.Buffer var respBuf bytes.Buffer
writeFirstLine(proto, code, status, &respBuf) writeFirstLine(&respBuf, proto, code, status)
writeHeaders(respHeader, &respBuf) writeHeaders(&respBuf, respHeader)
log.F("[http] %s <-> %s", c.RemoteAddr(), tgt) log.F("[http] %s <-> %s", c.RemoteAddr(), tgt)
c.Write(respBuf.Bytes()) c.Write(respBuf.Bytes())
@ -309,7 +309,7 @@ func cleanHeaders(header textproto.MIMEHeader) {
header.Del("Upgrade") header.Del("Upgrade")
} }
func writeFirstLine(s1, s2, s3 string, buf *bytes.Buffer) { func writeFirstLine(buf *bytes.Buffer, s1, s2, s3 string) {
buf.Write([]byte(s1)) buf.Write([]byte(s1))
buf.Write([]byte(" ")) buf.Write([]byte(" "))
buf.Write([]byte(s2)) buf.Write([]byte(s2))
@ -318,17 +318,14 @@ func writeFirstLine(s1, s2, s3 string, buf *bytes.Buffer) {
buf.Write([]byte("\r\n")) buf.Write([]byte("\r\n"))
} }
func writeHeaders(header textproto.MIMEHeader, buf *bytes.Buffer) { func writeHeaders(buf *bytes.Buffer, header textproto.MIMEHeader) {
for key, values := range header { for key, values := range header {
buf.Write([]byte(key)) for _, v := range values {
buf.Write([]byte(": ")) buf.Write([]byte(key))
for k, v := range values { buf.Write([]byte(": "))
buf.Write([]byte(v)) buf.Write([]byte(v))
if k > 0 { buf.Write([]byte("\r\n"))
buf.Write([]byte(" "))
}
} }
buf.Write([]byte("\r\n"))
} }
//header ended //header ended

View File

@ -75,9 +75,8 @@ func (p *MixedProxy) ListenAndServe(c net.Conn) {
if c == nil { if c == nil {
go p.socks5.ListenAndServeUDP() go p.socks5.ListenAndServeUDP()
l, err := net.Listen("tcp", p.addr)
//l, err := net.Listen("tcp", p.addr) l, err := net.Listen("tcp", p.addr)
if err != nil { if err != nil {
log.F("[mixed] failed to listen on %s: %v", p.addr, err) log.F("[mixed] failed to listen on %s: %v", p.addr, err)
return return

View File

@ -207,10 +207,13 @@ func (c *Conn) DecodeRespHeader() error {
} }
stream := cipher.NewCFBDecrypter(block, c.respBodyIV[:]) stream := cipher.NewCFBDecrypter(block, c.respBodyIV[:])
buf := make([]byte, 4) buf := make([]byte, 4)
if _, err := io.ReadFull(c.Conn, buf); err != nil { _, err = io.ReadFull(c.Conn, buf)
if err != nil {
return err return err
} }
stream.XORKeyStream(buf, buf) stream.XORKeyStream(buf, buf)
if buf[0] != c.reqRespV { if buf[0] != c.reqRespV {