Linux 从TCP连接获取HTTP头
我在golang为Linux编写一个类似proxifier的应用程序。执行时,应用程序将侦听所有TCP连接并将它们重定向到代理服务器地址。在这两者之间,应用程序还向HTTP头添加了一个“代理授权:基本…”头。当我看到TCP报头时,我无法获得HTTP报头。哪里出了问题,或者如何提取HTTP数据?有没有其他方法可以实现这一点?我对golang也是新手,但下面的代码对我来说很有用,因为需要从tcp套接字获取HTTP数据Linux 从TCP连接获取HTTP头,linux,http,go,tcp,http-proxy,Linux,Http,Go,Tcp,Http Proxy,我在golang为Linux编写一个类似proxifier的应用程序。执行时,应用程序将侦听所有TCP连接并将它们重定向到代理服务器地址。在这两者之间,应用程序还向HTTP头添加了一个“代理授权:基本…”头。当我看到TCP报头时,我无法获得HTTP报头。哪里出了问题,或者如何提取HTTP数据?有没有其他方法可以实现这一点?我对golang也是新手,但下面的代码对我来说很有用,因为需要从tcp套接字获取HTTP数据 package main import "net" import "fmt"
package main
import "net"
import "fmt"
import "io"
func main() {
fmt.Println("Launching server...")
ln, _ := net.Listen("tcp", ":8081")
conn, _ := ln.Accept()
tmp := make([]byte,256)
for {
n,err := conn.Read(tmp)
if err != nil {
if err != io.EOF {
fmt.Println("read error:", err)
}
break
}
fmt.Println("rx:", string(tmp[:n]))
}
}
主要问题是TCP连接不知道HTTP。您可能应该使用
net/http.ReadRequest
方法来解析http请求,这样您就可以访问http头了。看。我对golang了解不多,但在c/c++中,我可以使用read()系统调用读取socket fd,并获得http请求的头/内容。谢谢。。。但是当我传递了格式错误的HTTP请求时,。。。。。这不是我的方式think@ManthanTilva-实际上,TCP连接字节包含TCP头,如IP版本、源、目标。。。。。。我的问题是http头在哪个索引处,或者请求在字节数组中找到???@Love\u for\u代码。正如我所说,我不知道戈朗怎么了。但在c/c++中,当您在套接字上使用read系统调用fd return by accept系统调用时,它将返回tcp层的有效负载,在这种情况下,它是http头+内容。我认为golang也应该如此。