openssl并随机收听端口

时间:2015-04-21 07:30:13

标签: c network-programming openssl server

我试图找到简单的方法来选择和听随机端口。我可以迭代所有端口并尝试打开每个端口并在此传递fd之后转换为BIO,但此解决方案过于复杂且可能被破坏。另外,我搜索便携式解决方案。

而不是我搜索单个OpenSSL功能,但无法找到任何功能。是否存在由OpenSSL库提供的单函数调用等简单解决方案。

关于我的回复:

我在路过时遇到麻烦" *"或" *:*"到BIO_new_accept并通过BIO_get_accept_port获取端口号。在这种情况下,BIO_get_accept_port完全返回我传递给BIO_new_accept的字符串。有关如何获取端口号的任何建议吗?

其他编辑:

我发现在用asterix调用BIO_new_accept之后我必须调用BIO_do_accept,但是出现了错误:

140418757990096:错误:02003000:系统库:getservbyname:系统库:b_sock.c:224:service =' *'

1 个答案:

答案 0 :(得分:2)

我可能找到了解决方案。因为我的英语很差,所以我不完全理解文档文本。 我再次阅读文档,找到了解决方案! 来自网站: http://linux.die.net/man/3/bio_do_accept

  

BIO_set_accept_port()使用字符串名称来设置接受端口。该   port表示为" host:port"形式的字符串,其中" host"   是使用的接口和"端口"是港口。两个值中的任何一个或两个   可以" *"这被解释为任何接口或端口   分别。 "端口"具有与中指定的端口相同的语法   BIO_set_conn_port()用于连接BIO,也就是说它可以是数字   端口字符串或要使用getservbyname()和字符串查找的字符串   表

所以我只能将asterix字符传递给BIO_do_accept。

将asterix字符传递给BIO_new_accept并不起作用,因为BIO_do_accept返回错误。我用这种方式解决了这个问题:

不是将asterix传递给BIO_new_accept,而是从一个开始增加int,并为每个数字执行BIO_new_accept。