登录
首页 >  Golang >  Go问答

发起原始 HTTPS 请求的系统调用使用方法

来源:stackoverflow

时间:2024-02-10 22:30:22 220浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《发起原始 HTTPS 请求的系统调用使用方法》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

我正在尝试使用 go 中的“syscall”模块发出原始 https 请求。如果我使用“net”,我可以使用tls.client将net.conn转换为tls.conn并正常向https网站发出请求,但syscall中似乎没有类似的功能。我该怎么做?

p/s:这是我在系统调用中发出 http 请求的代码: 包主要

import (
    "syscall"
    "time"
)
func main() {
    for i := 0; i < 100; i++ {
        go func() {
            sysCall, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_STREAM, syscall.IPPROTO_TCP)
            if err != nil {
                panic(err)
            }
            address := syscall.SockaddrInet4{
                Port: 80,
                Addr: [4]byte{78, 31, 67, 223},
            }
            connErr := syscall.Connect(sysCall, &address)
            if connErr != nil {
                panic(err)
            }
            func() {
                defer syscall.Close(sysCall)
                _, err = syscall.Write(sysCall, []byte("GET / HTTP/1.1\r\nHost: 78.31.67.223\r\n\r\n"))
                if err != nil {
                    panic(err)
                }
            }()
        }()
    }
    time.Sleep(10 * time.Second)
}

正确答案


TLS 在用户空间中处理,而不是在操作系统内核中处理。这意味着没有用于处理 HTTPS 或 TLS 的系统调用。相反,完整的 TLS 堆栈需要在用户空间中实现,并且只能使用系统调用发送和接收 TCP 级别的数据(即 TLS 握手、加密的有效负载)。

鉴于 tls.Conn 对象 can be created from a net.Conn 应该可以使用系统调用实现您自己的 net.Conn 兼容类型,然后使用 crypto/tls 作为 TLS 堆栈。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>