gpt4 book ai didi

sockets - 监听所有 IP 数据包,包括 ICMP、TCP 和 UDP?

转载 作者:IT王子 更新时间:2023-10-29 02:03:23 26 4
gpt4 key购买 nike

特别是在golang中,有net.ListenIPnet.ListenTCP这样的接口(interface)。

我想知道,如果进程 p1 ListenIP(192.168.1.1) 和进程 p2 ListenTCP(192.168.1.1:80),所有数据包都会发送到 192.168 .1.1(无论是TCP还是UDP)被p1截获,p2永远不会接受一个TCP连接?

最佳答案

这是net.ListenIP()的源代码:

// ListenIP listens for incoming IP packets addressed to the local
// address laddr. The returned connection's ReadFrom and WriteTo
// methods can be used to receive and send IP packets with per-packet
// addressing.
func ListenIP(netProto string, laddr *IPAddr) (*IPConn, error) {
net, proto, err := parseNetwork(netProto)
if err != nil {
return nil, &OpError{Op: "listen", Net: netProto, Source: nil, Addr: laddr.opAddr(), Err: err}
}
switch net {
case "ip", "ip4", "ip6":
default:
return nil, &OpError{Op: "listen", Net: netProto, Source: nil, Addr: laddr.opAddr(), Err: UnknownNetworkError(netProto)}
}
fd, err := internetSocket(net, laddr, nil, noDeadline, syscall.SOCK_RAW, proto, "listen", noCancel)
if err != nil {
return nil, &OpError{Op: "listen", Net: netProto, Source: nil, Addr: laddr.opAddr(), Err: err}
}
return newIPConn(fd), nil
}

它在 Linux 上创建一个原始套接字,一个 IPPROTO_RAW socket仅发送。 TCP 和 UDP 数据包永远不会传送到原始套接字,它们总是由内核协议(protocol)栈处理。 ICMP 数据包的副本被传送到匹配的原始套接字。所有其他发往未被内核子系统处理的协议(protocol)的数据包都被传送到原始套接字。

关于sockets - 监听所有 IP 数据包,包括 ICMP、TCP 和 UDP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43131419/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com