Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 从TCP连接获取HTTP头_Linux_Http_Go_Tcp_Http Proxy - Fatal编程技术网

Linux 从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"

我在golang为Linux编写一个类似proxifier的应用程序。执行时,应用程序将侦听所有TCP连接并将它们重定向到代理服务器地址。在这两者之间,应用程序还向HTTP头添加了一个“代理授权:基本…”头。当我看到TCP报头时,我无法获得HTTP报头。哪里出了问题,或者如何提取HTTP数据?有没有其他方法可以实现这一点?

我对golang也是新手,但下面的代码对我来说很有用,因为需要从tcp套接字获取HTTP数据

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也应该如此。