当前位置: 技术问答>linux和unix
linux下的一个socket可以先后连续连接不同的server吗?
来源: 互联网 发布时间:2016-04-04
本文导语: 要做一个端口扫描程序,运行在linux下。 先问一个问题:通过socket的connect,根据连接成功或失败,能不能作为端口开启的依据? 如果扫描某个端口,连接上了,如何继续用这个socket连接下一个端口?shutdown之后再conn...
要做一个端口扫描程序,运行在linux下。
先问一个问题:通过socket的connect,根据连接成功或失败,能不能作为端口开启的依据?
如果扫描某个端口,连接上了,如何继续用这个socket连接下一个端口?shutdown之后再connect,不行。能不能通过调用setsockopt使socket重复使用?
本来可以采用close之后,再创建一个socket的办法。不过epoll的脾气很怪,此时如果创建socket,对这个socket会一直收到EPOLLOUT消息,而我就是根据异步connect之后,产生的消息是EPOLLERR还是EPOLLOUT,来断定connect是否成功,这样就被干扰了。
先问一个问题:通过socket的connect,根据连接成功或失败,能不能作为端口开启的依据?
如果扫描某个端口,连接上了,如何继续用这个socket连接下一个端口?shutdown之后再connect,不行。能不能通过调用setsockopt使socket重复使用?
本来可以采用close之后,再创建一个socket的办法。不过epoll的脾气很怪,此时如果创建socket,对这个socket会一直收到EPOLLOUT消息,而我就是根据异步connect之后,产生的消息是EPOLLERR还是EPOLLOUT,来断定connect是否成功,这样就被干扰了。
|
to:如果扫描某个端口,连接上了,如何继续用这个socket连接下一个端口?shutdown之后再connect,不行。能不能通过调用setsockopt使socket重复使用?
LZ可以通过bind来对指定的端口进行连接(port>1024)(最大的记不清了,好像是65535),,
例如:先指定一个port=5000,如果绑定成功,再指定下一个端口5001,这个循环下去,可以满足LZ的要求
shutdown之后不能重用,这里可能与2MSL有关,也就是在断开连接后一段时间内,此端口号是不能重用的,要
等到2MSL以后才可能重新连接,(MSL=60s,在正常情况下,也有可能是120s,不同的操作系统设定值不同)
LZ可以通过bind来对指定的端口进行连接(port>1024)(最大的记不清了,好像是65535),,
例如:先指定一个port=5000,如果绑定成功,再指定下一个端口5001,这个循环下去,可以满足LZ的要求
shutdown之后不能重用,这里可能与2MSL有关,也就是在断开连接后一段时间内,此端口号是不能重用的,要
等到2MSL以后才可能重新连接,(MSL=60s,在正常情况下,也有可能是120s,不同的操作系统设定值不同)
|
还得用epoll,管他回不回呢,回就处理,不回自动超时再另行处理,so pretty