gpt4 book ai didi

c++ - 谁可以发送到绑定(bind)到 INADDR_LOOPBACK 的套接字?

转载 作者:太空狗 更新时间:2023-10-29 11:49:35 25 4
gpt4 key购买 nike

我对套接字编程有些陌生,对将套接字绑定(bind)到地址 INADDR_LOOPBACK127.0.0.1 的概念感到困惑。

如果我正在编写服务器代码来监听特定端口上的消息,并且我将一个套接字绑定(bind)到一个地址,如以下代码摘录...

int sd = socket( PF_INET, SOCK_DGRAM, 0 );
sockaddr_in si;
si.sin_family = AF_INET;
si.sin_addr.s_addr = inet_addr( "127.0.0.1" );
si.sin_port = htons( 9090 );
bind( sd, (sockaddr*)&si, sizeof si )

...我的问题是:谁能够发送到这个套接字?

我知道与服务器进程在同一台 PC 上运行的其他进程可以到达上述套接字,方法是使用 dest_addr 参数指定 执行 sendto() >127.0.0.1.

但是,如果同一网络上其他 PC 上的客户端知道服务器的“实际”地址,它们是否也可以发送到该套接字?我的意思是:如果我在 Linux PC 上运行 ifconfig,我会看到一个 inet 地址,例如10.138.19.27。这是否意味着客户端进程在与服务器不同的 PC 上,但在同一网络上,可以发送到服务器的套接字 - 绑定(bind)到 127.0.0.1 - 如果客户端指定地址 10.138.19.27?

最佳答案

仅连接到 127.0.0.1,并且这些连接只能来自与监听器相同的机器。


当您不绑定(bind)或绑定(bind)到 INADDR_ANY aka 0.0.0.0 时,您接受来自所有接口(interface)的连接。

Window 1                                    Window 2
------------------------------------------ ------------------------------------------
$ nc -l 5678
$ echo test-ip | nc 69.163.162.155 5678 test-ip

$ echo $?
0
$ nc -l 5678
$ echo test-localhost | nc localhost 5678 test-localhost

$ echo $?
0

当您绑定(bind)到一个 IP 地址时,您只接受指向该 IP 地址的连接。

Window 1                                    Window 2
------------------------------------------ ------------------------------------------
$ nc -l 69.163.162.155 5678
$ echo test-localhost | nc localhost 5678

$ echo $?
1

$ echo test-ip | nc 69.163.162.155 5678 test-ip

$ echo $?
0

127.x.x.x 中的地址也是如此。

Window 1                                    Window 2
------------------------------------------ ------------------------------------------
$ nc -l localhost 5678
$ echo test-ip | nc 69.163.162.155 5678

$ echo $?
1

$ echo test-localhost | nc localhost 5678 test-localhost

$ echo $?
0

127.x.x.x的特别之处在于只有你自己的机器才能到达127.x.x.x地址。

关于c++ - 谁可以发送到绑定(bind)到 INADDR_LOOPBACK 的套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45023609/

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