- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我对套接字编程有些陌生,对将套接字绑定(bind)到地址 INADDR_LOOPBACK
或 127.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/
我试图在 C 中设置环回套接字,但没有任何效果。我正在尝试创建一个函数,它打开一个带有环回地址的套接字,将数据发送到套接字,然后从另一个函数读取数据,但没有任何效果。我相信我不知道如何使用与连接相关的
我对套接字编程有些陌生,对将套接字绑定(bind)到地址 INADDR_LOOPBACK 或 127.0.0.1 的概念感到困惑。 如果我正在编写服务器代码来监听特定端口上的消息,并且我将一个套接字绑
我正在使用 Pelican建立一个博客。启动开发服务器后,我收到警告: Do you want the application “Python.app” to accept incoming netw
我正在尝试使用没有文档的 peertalk 框架。在他们的 obj-c 示例中,他们使用了 INADDR_LOOPBACK 宏,并且示例正在运行。但是当我尝试快速执行相同操作时,系统会抛出一个 Unr
注意:我找到了研究这个问题的解决方案。下一个犯这个错误的人有望在花费大量时间之前发现这个问题。 我一直在尝试在 Linux 系统上实现 TCP 服务器。问题是我收到一条非常普通的错误消息,它没有揭示问
我是一名优秀的程序员,十分优秀!