58 lines
1.1 KiB
Go
58 lines
1.1 KiB
Go
package fwd
|
|
|
|
import (
|
|
"bufio"
|
|
"io"
|
|
"log/slog"
|
|
"proxy-server/pkg/utils"
|
|
)
|
|
|
|
func analysis(reader io.Reader) {
|
|
buf := bufio.NewReader(reader)
|
|
first, err := buf.Peek(8)
|
|
if err != nil {
|
|
slog.Error("analysis peek error", "err", err)
|
|
} else {
|
|
|
|
switch {
|
|
case first[0] == 0x16:
|
|
analysisHttps(reader)
|
|
case
|
|
string(first[:4]) == "GET ",
|
|
// string(first[:4]) == "PUT ",
|
|
string(first[:5]) == "POST ":
|
|
// string(first[:4]) == "HEAD ",
|
|
// string(first[:4]) == "TRACE ",
|
|
// string(first[:4]) == "PATCH ",
|
|
// string(first[:4]) == "DELETE ",
|
|
// string(first[:4]) == "CONNECT ",
|
|
// string(first[:4]) == "OPTIONS ":
|
|
analysisHttp(reader)
|
|
}
|
|
}
|
|
discord(reader)
|
|
}
|
|
|
|
func analysisHttp(reader io.Reader) {
|
|
}
|
|
|
|
func analysisHttps(reader io.Reader) {
|
|
|
|
head, err := utils.ReadBuffer(reader, 5)
|
|
if err != nil {
|
|
slog.Error("analysis https err", "err", err)
|
|
return
|
|
}
|
|
|
|
if head[1] == 0x03 && head[2] == 0x03 {
|
|
// tls1.2
|
|
}
|
|
}
|
|
|
|
func discord(reader io.Reader) {
|
|
_, err := io.Copy(io.Discard, reader)
|
|
if err != nil {
|
|
slog.Error("analysis discord err", "err", err)
|
|
}
|
|
}
|