谁可以发送到绑定到INADDR_LOOPBACK的套接字?

时间:2017-07-11 00:38:34

标签: c++ c linux sockets

我对套接字编程有些新意,对于将套接字绑定到地址INADDR_LOOPBACK127.0.0.1的概念感到困惑。

如果我正在编写服务器代码以侦听特定端口上的消息,并且我将套接字绑定到地址,如下面的代码exerpt ...

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上运行的其他进程可以通过sendto() dest_addr参数指定127.0.0.1来到达上述套接字。

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

1 个答案:

答案 0 :(得分:3)

仅与127.0.0.1建立连接,并且这些连接只能来自与侦听器相同的计算机。

当你没有绑定或绑定到INADDR_ANY又名0.0.0.0时,你接受来自所有接口的连接。

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

绑定到IP地址时,只接受定向到该IP地址的连接。

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中的地址也是如此。

if (isset($_GET["page"])) { $page  = $_GET["page"]; } else { $page=1; }; 

$recortds = 10; // change here for records per page

$start_from = ($page-1) * $records;

$qry = pg_query($dbconn,"select count(*) as total from table"); 
$row_sql = pg_fetch_row($qry); 
$total_records = $row_sql[0]; 
$total_pages = ceil($total_records / $records);

$select = pg_query($dbconn,"select * from table limit $records offset $start_from");

关于127.x.x.x的特殊之处在于,只有您自己的计算机才能达到127.x.x.x地址。