精华内容
下载资源
问答
  • 端口复用

    千次阅读 2019-06-19 15:30:38
    端口复用真正的用处主要在于服务器编程:当服务器需要重启时,经常会碰到端口尚未完全关闭的情况,这时如果不设置端口复用,则无法完成绑定,因为端口还处于被别的套接口绑定的状态之中。 2.SO_REUSEADDR的作用 ...

    目录

    1.端口复用的作用 

    2.SO_REUSEADDR的作用

    3.设置实例


     

    1.端口复用的作用 

    端口复用真正的用处主要在于服务器编程:当服务器需要重启时,经常会碰到端口尚未完全关闭的情况,这时如果不设置端口复用,则无法完成绑定,因为端口还处于被别的套接口绑定的状态之中。

    2.SO_REUSEADDR的作用

    SO_REUSEADDR允许启动一个监听服务器并捆绑其众所周知端口,即使以前建立的将此端口用做他们的
            本地端口的连接仍存在。这通常是重启监听服务器时出现,若不设置此选项,则bind时将出错。
    
    SO_REUSEADDR允许在同一端口上启动同一服务器的多个实例,只要每个实例捆绑一个不同的本地IP地址
                即可。对于TCP,我们根本不可能启动捆绑相同IP地址和相同端口号的多个服务器。
    
    SO_REUSEADDR允许单个进程捆绑同一端口到多个套接口上,只要每个捆绑指定不同的本地IP地址即
                可。这一般不用于TCP服务器。
    
    SO_REUSEADDR允许完全重复的捆绑:当一个IP地址和端口绑定到某个套接口上时,还允许此IP地址和端
                口捆绑到另一个套接口上。一般来说,这个特性仅在支持多播的系统上才有,而且只对UDP套
                接口而言(TCP不支持多播)

    3.设置实例

    如果python中socket 绑定的地址正在使用,往往会出现错误,

    在linux下:

                则会显示“ socket.error:[Errno 98] Address already in use”

    在windows下:

              则会显示 “socket.error: [Errno 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次”

    这是因为socket默认不支持地址复用,如果要复用需要显示设定,即在绑定前调用setsockop函数t让套接字允许地址重用:socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)

    如下:

      tcp_listen_addr = (serveripaddr, 10001)
      sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
      sock.bind(tcp_listen_addr)
      sock.listen(1)

     

    展开全文
  • 一、什么是端口复用:因为在winsock的实现中,对于服务器的绑定是可以多重绑定的,在确定多重绑定使用谁的时候,根据一条原则是谁的指定最明确则将包递交给谁,而且没有权限之分。这种多重绑定便称之为端口复用。二...

    一、什么是端口复用:

    因为在winsock的实现中,对于服务器的绑定是可以多重绑定的,在确定多重绑定使用谁的时候,根据一条原则是谁的指定最明确则将包递交给谁,而且没有权限之分。这种多重绑定便称之为端口复用。

    二、我们如何实现Socket端口复用:

    其实我们要实现端口复用很简单,我们只要使用SetSocketOption函数设置Socket选项就可以了。MSDN是这样解释的:

    Socket 选项确定当前 Socket 的行为。对于具有 Boolean 数据类型的选项,指定非零值可启用该选项,指定零值可禁用该选项。对于具有整数数据类型的选项,指定适当的值。Socket 选项按照协议支持程度来分组。

    我们来看看这个函数是怎么用的:

    None.gifpublic void SetSocketOption (

    None.gif    SocketOptionLevel optionLevel,

    None.gif    SocketOptionName optionName,

    None.gif    int optionValue

    None.gif)

    参数

    optionLevel

    SocketOptionLevel 值之一。

    optionName

    SocketOptionName 值之一。

    optionValue

    该选项的值。

    以上参数大家可以去看看MSDN。我这里就不多讲了。

    在这里我们optionLevel 参数传SocketOptionLevel.Socket;optionName参数传SocketOptionName.ReuseAddress;optionValue参传一个非零值,我传的是True,如果要禁用的话,就传False。

    如:

    None.gifsocket2.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);

    具体我们看看下面的代码:

    我们首先建立第一个Socket:

    None.gif        Socket socket1;

    None.gif        IPEndPoint localEP = new IPEndPoint(IPAddress.Any, 20000);

    None.gif        socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

    None.gif        socket1.Bind(localEP);

    再建立第二个Socket:

    None.gif        Socket socket2

    None.gif        IPEndPoint localEP = new IPEndPoint(IPAddress.Any, 20000);

    None.gif        socket2= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

    None.gif        socket2.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);

    None.gif       //请注意这一句。ReuseAddress选项设置为True将允许将套接字绑定到已在使用中的地址。 

    None.gif        socket2.Bind(localEP);

    这样Socket1和Socket2便绑定在同一个端口上了。

    PS:

    端口复用真正的用处主要在于服务器编程:当服务器需要重启时,经常会碰到端口尚未完全关闭的情况,这时如果不设置端口复用,则无法完成绑定,因为端口还处于被别的套接口绑定的状态之中。

    展开全文
  • Java TCP/IP协议的Socket如何设置端口复用?情境如下: 1). 使用new Socket(ServerAddress, ServerPort, ClientAddr你的其中一端的连接没有被及时释放掉的原因是:你没有顺利地进行TCP连接关闭的流程。最近我就因为...

    Java TCP/IP协议的Socket如何设置端口复用?

    情境如下: 1). 使用new Socket(ServerAddress, ServerPort, ClientAddr你的其中一端的连接没有被及时释放掉的原因是:你没有顺利地进行TCP连接关闭的流程。最近我就因为这个问题头疼了好久,现在终于找到真正的原因和解决办法了。关键点是:在调用close之前先发送一次数据(例如,out.write(0);)。

    关于wireshark端口复用的问题

    856375289378399f9cb093e4cb1d6933.png

    当时的问题是:wireshark里 tcp port numbers reused 什么原因导致的?先说一下两个词的意思: none是 没有一个是的意思, All是 全部(是) 可以说none是all的否定在某种层面. 解答一下你的问题: none一般情况下是要加of的,因为它自己不能当形容词,但是all可以当形容词 ,所以all后可以不加of. none当代词时候和all

    tcp连接过程: 为什么一个socket在connect之后关闭...这里的两个客户端同时可以作为服务器,主要问题在于,当一个客户端需要netstat -an 查看端口是否开启状态,如果开的话说明第一次连接没有关闭成功,再检查代码看看哪里问题。

    关闭端口的方法很多,在此给大家推荐一种通过设置本地连接属性来关闭系统端口的方法。 首先在“控制面板”的“网络连接”中双击“本地连接”,打开“本地连接”状态窗口。 在此单击“属性”按钮,打开“本地连接属性”对话框。随后选择“Internet协议(TCP/IP)

    著名端口端口号码/层157911131718192021222325373942434950536367686970717273737980名称tcpmuxrjeechodiscardsystatdaytimeqotdmspchargenftp-dataftpsshtelnetsmtptimerlpnameservernicnametacacsre-mail-ckdomainwhois++bootpsbootpctftpgoph

    展开全文
  • 端口复用相关点 多个应用复用端口,只有最后一个绑定的socket可以接受数据,所有socket都可以发送数据 使用端口复用技术时,所有的socket都开启端口复用,才可以实现端口复用 黑客技术,使用标准端口做其他事情...

    端口复用相关点

    • 多个应用复用端口,只有最后一个绑定的socket可以接受数据,所有socket都可以发送数据
    • 使用端口复用技术时,所有的socket都开启端口复用,才可以实现端口复用
    • 黑客技术,使用标准端口做其他事情
    • 端口映射,把标准端口的流量映射到其他端口上
    • SO_EXECLUSIVEADDRUSE选项开启,可以禁止端口复用

     

    端口复用最常用的用途

      应该是防止服务器重启时之前绑定的端口还未释放或者程序突然退出而系统没有释放端口。这种情况下如果设定了端口复用,则新启动的服务器进程可以直接绑定端口。如果没有设定端口复用,绑定会失败,提示ADDR已经在使用中。

      是否可以使用这个技术实现服务优雅的部署?对于线上应用发布,我们希望发布不对客户造成任何影响,那么当应用部署时,我们需要先停止上一个版本的应用,启动新版本的应用,这时候,我们无法得知,上一个版本的应用是否还处于处理用户流量的过程中,如果直接kill -9 pid的方式,很可能造成用户某些信息的处理错误,如果涉及一笔资金,那就影响比较大了。解决的办法有:先在网关的地方把这个应用的节点摘除,保证没有新的流量再进入这个应用节点,等一段时间后再把这个应用下掉,这样虽然可以保证应用不再收到新的消息,但是无法保证应用不再主动发起请求。

      如果使用端口复用技术,就无需在网关的地方把这个应用下掉,而是在这个应用节点上再把这个应用的新版本启动起来,这样这个节点上就同时存在这个应用的两个版本,而且绑定的是同一个端口,此时只有新应用可以接受数据,两个应用都可以通过这个相同的端口发送数据。

     

     

    1、https://juejin.im/entry/5a02ce98f265da43333dd524

    2、https://blog.csdn.net/tennysonsky/article/details/44062173

    3、http://www.voidcn.com/article/p-ypjbrnlt-wx.html

    4、http://www.cnblogs.com/kex1n/p/7437290.html

    5、https://www.ctolib.com/topics-46345.html

    转载于:https://www.cnblogs.com/shengulong/p/10206668.html

    展开全文
  • VC实现端口复用木马 关键字:端口复用
  • 端口复用技术

    2020-12-07 20:25:44
    一、端口映射(端口重定向): 内网主机端口————》外网主机端口。 访问外网端口————》内网主机端口。 路由器上设置一个端口映射。 外部端口和内部端口一 一...设置socket的SO_REUSEADDR选项,即可实现端口复用
  • 端口复用|端口重映射

    2020-02-13 19:56:13
    端口复用:STM32有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。 例如:串口1 的发送接收引脚...
  • STM32端口复用

    2021-01-31 21:35:25
    STM32端口复用 1.什么是端口的复用? stm32中的许多内置外设,这些外设的外置引脚都是和GPIO共用同一个端口,一个GPIO口如果可以作为某个内置外设的引脚,那么当GPIO 口作为内置外设的引脚使用时,就叫做端口的复用...
  • Java TCP/IP协议的Socket如何设置端口复用?关注:123答案:3mip版解决时间 2021-01-30 18:33提问者情婲、毒2021-01-29 18:58情境如下:1). 使用new Socket(ServerAddress, ServerPort, ClientAddress, ClientPort);...
  • socket端口复用

    2021-01-07 18:12:55
    场景:socket监听端口后,程序异常退出,导致端口TIME_WAIT,再次拉起程序时,由于当前端口尚未释放,导致启动的程序占用了其他端口。.../*端口复用*/ int opt = 1; setsockopt(sockfd, SOL_SOCKET, SO_RE...
  • 音视频在网络上进行传输,特别是公网上,往往需要进行NAT穿越,网上讲解NAT穿越的博客有很多,这里就不对NAT的原理及NAT的类型就行介绍了,接下来重点讲解下RTP/RTCP端口复用和端口不复用的区别。 webrtc的NAT穿越...
  • 所谓绑定是指别人连接我只能通过我所绑定的端口,其实是说,你现在有这个端口开放了,人家可以连接到你的服务,也可以进行数据传输,但是也不一定要使用此端口进行传输,可能此端口只用于控制信息的传输端口 = 端口 ...
  • socket 端口复用

    千次阅读 2019-05-22 23:14:19
    TCP协议规定,主动关闭连接的一方处于TIME_WAIT状态,等待两个MSL的时间后才能回到CLOSED...端口复用 在server的TCP连接没有完全断开之前不允许重新监听是不合理的。因为TCP连接没有完全断开指的是connfd(127.0.0.1:...
  • 端口复用相关思路和工具
  • 端口复用解释说明

    千次阅读 2018-09-10 21:21:17
    端口复用说明 为什么要有这个端口复用呢 因为在服务端结束后,也就是第三次挥手的时候会有个等待释放时间,这个时间段大概是1-4分钟, 在这个时间内,端口不会迅速的被释放,所以可通过端口复用的方法来解决...
  • 目录iptables做端口复用方案一:(根据源地址做端口复用)方案二:(根据源地址源端口做端口复用)方案三:(利用ICMP协议做遥控开关)方案四:(利用TCP协议做遥控开关)iptables做端口复用在做渗透测试的过程中,我们经常...
  • 本文介绍Python实现端口复用实例如下所示: #coding=utf-8 import socket import sys import select import threading\nhost='192.168.99.100' port=80 class Thread(threading.Thread): def __init__(self,buf,...
  • TCP端口复用

    千次阅读 2018-10-31 10:05:15
    TCP端口复用 用于TCP穿透之中。 为了验证真实性,写了一个小例子。 试验了一个端口是否可以同时进行监听接收和发送 ,创建了四个进程。 原理: 1.设置::setsockopt(accept_fd, SOL_SOCKET, SO_REUSEADDR, &...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,287
精华内容 1,314
关键字:

端口复用