【问题标题】:openssl and listen on random portopenssl 并监听随机端口
【发布时间】:2015-04-21 07:30:12
【问题描述】:

我试图找到简单的方法来选择和侦听随机端口。我可以迭代所有端口并尝试打开每个端口,然后将 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:error:02003000:system library:getservbyname:system library:b_sock.c:224:service='*'

【问题讨论】:

  • 你的意思是说服务器应该随机绑定到一个端口并监听而不是特定的端口? (比如如果没有具体绑定,客户会怎么做)?
  • 我的意思是服务器应该绑定在第一个空闲端口。客户端知道端口号,因为服务器运行客户端并将端口号设置为环境变量。

标签: c network-programming openssl server


【解决方案1】:

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

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

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

将星号字符传递给 BIO_new_accept 不起作用,因为 BIO_do_accept 返回错误。我是这样解决的:

我没有将 asterix 传递给 BIO_new_accept,而是从 1 开始增加 int 并对每个数字执行 BIO_new_accept。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 2021-07-15
    • 2017-07-12
    相关资源
    最近更新 更多