windows – 为什么套接字connect()到它自己的短暂端口?
发布时间:2020-12-14 02:22:51 所属栏目:Windows 来源:网络整理
导读:如果我使用自动分配的临时端口(5000-65534)范围内的端口连接到localhost,我可以可靠地获得一个Winsock套接字connect()到自身.具体来说,Windows似乎有一个系统范围的滚动端口号,它将尝试将其指定为客户端套接字的本地端口号.如果我创建套接字直到分配的数字刚
如果我使用自动分配的临时端口(5000-65534)范围内的端口连接到localhost,我可以可靠地获得一个Winsock套接字connect()到自身.具体来说,Windows似乎有一个系统范围的滚动端口号,它将尝试将其指定为客户端套接字的本地端口号.如果我创建套接字直到分配的数字刚好低于我的目标端口号,然后重复创建套接字并尝试连接到该端口号,我通常可以让套接字连接到自己.
我首先在一个重复尝试连接到localhost上的某个端口的应用程序中发生这种情况,当服务没有监听时,它很少成功建立连接并接收它最初发送的消息(恰好是Redis PING命令). 一个例子,在Python中(无需监听目标端口即可运行): import socket TARGET_PORT = 49400 def mksocket(): return socket.socket(socket.AF_INET,socket.SOCK_STREAM,socket.IPPROTO_TCP) while True: sock = mksocket() sock.bind(('127.0.0.1',0)) host,port = sock.getsockname() if port > TARGET_PORT - 10 and port < TARGET_PORT: break print port while port < TARGET_PORT: sock = mksocket() err = None try: sock.connect(('127.0.0.1',TARGET_PORT)) except socket.error,e: err = e host,port = sock.getsockname() if err: print 'Unable to connect to port %d,used local port %d: %s' % (TARGET_PORT,port,err) else: print 'Connected to port %d,used local port %d' (TARGET_PORT,port) 在我的Mac机器上,这最终终止,无法连接到端口49400,使用本地端口49400.在我的Windows 7机器上,连接成功建立并打印连接到端口49400,使用本地端口49400.生成的套接字接收任何发送给它的数据. 这是Winsock中的一个错误吗?这是我的代码中的错误吗? 编辑:以下是TcpView的屏幕截图,显示了违规连接: 解决方法
这似乎是在
RFC 793的#3.4中描述的“同时启动”.参见图8.注意,在任何阶段,任何一方都不处于状态LISTEN.在您的情况下,两端都是相同的:这将导致它完全按照RFC中的描述工作.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows – 使用BAT从网络共享复制
- Windows10远程桌面连接配置
- windows-server-2008-r2 – 如果“下次登录时更改密码”要求
- windows – 如何向DHCP服务器添加另一个地址范围
- 原装Win8系统换win7系统(图文教程)
- windows-server-2003 – Windows Web服务器之间共享存储的最
- windows – 如何劫持Caps Lock键以进行剪切,复制,粘贴键盘操
- Windows批处理脚本解压缩目录中的文件
- Windows Azure Service Bus主题可以拥有的最大订阅数(如果有
- Qt App适用于MacOSX,Windows上的访问冲突
推荐文章
站长推荐
热点阅读