加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 在本地主机上使用相同的IP和端口创建套接字

发布时间:2020-12-14 00:55:06 所属栏目:Linux 来源:网络整理
导读:我在 Linux上看到了奇怪的行为,我看到远程端和本地端都显示相同的IP和端口组合.以下是netstat输出 netstat -anp | grep 6102 tcp 0 0 139.185.44.123:61020 0.0.0.0:* LISTEN 3361 / a.out tcp 0 0 139.185.44.123:61021 139.185.44.123:61021 ESTABLISHED 3
我在 Linux上看到了奇怪的行为,我看到远程端和本地端都显示相同的IP和端口组合.以下是netstat输出

netstat -anp | grep 6102

tcp 0 0 139.185.44.123:61020 0.0.0.0:* LISTEN 3361 / a.out
tcp 0 0 139.185.44.123:61021 139.185.44.123:61021 ESTABLISHED 3361 / a.out

任何人都可以告诉我,这是否可能?如果是,那么可能是什么情景?

解决方法

连接由4元组((源IP,源端口),(目标IP,目标端口))标识,源端口和目标端口可以相同而没有任何问题.甚至可以通过一个过程建立这种连接,这将导致您看到的输出.

但是,我刚被一个令人讨厌的错误所困扰,其中一个客户端套接字将尝试连接到同一台机器上短暂端口范围内具有端口号的服务器套接字.连接操作将重试操作,直到成功为止.

重试功能是问题:如果服务器应用程序没有运行并且随机选择的源端口与目标端口相同(这是可能的,因为目标端口在临时范围内),客户端套接字将连接到自己(这可能会对客户端应用程序的内部逻辑造成严重破坏).

由于客户端正在尽快进行重试,因此可能发生的可能性为1到30.000的可能性很快.

以下Python脚本重现它:

import socket

host = 'localhost'
port = 35911

ctr = 0
while True:
    try:
        s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        s.settimeout(5)
        ctr += 1
        s.connect((host,port))
        print "Connected to self after",ctr,"tries"
        break
    except socket.error,e:
        print e
        # Retry

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读