带有curl-接口或CURLOPT_interface的SO_BINDTODEVICE


SO_BINDTODEVICE with curl --interface or CURLOPT_INTERFACE

以非root用户身份运行此命令:

curl—接口tun0http://google.com-v

SO_BINDTODEVICE tun0失败,错误号1:不允许操作;将定期绑定

在php中设置curl_setopt($ch, CURLOPT_INTERFACE "tun0")也不起作用。但是,

ping-我tun0 google.com

效果很好,所以这只是卷曲的问题。它甚至可以为root用户使用curl,但它确实应该为非root用户使用。

我有一个openpvn接口tun0,但lo接口也会发生同样的情况。

这种情况发生在多个系统上,那么--interface选项只是在curl中中断了,还是应该以其他方式使用它?我应该为curl启用一些特殊的功能来使用该界面吗?

我认为您没有正确解释详细消息。

curl的--interface选项要求它将套接字的本地端绑定到特定的IP/网络接口。

绑定套接字是通过普通的bind()调用完成的。

除了bind()调用之外,linux还提供了SO_BINDTODEVICE setsockopt选项,这是一种更好、更完整的接口绑定。然而,这个调用需要root访问权限才能工作,而大多数使用libcurl的应用程序都没有root访问权限,然后它将在详细输出中出现上述文本而失败。

因此,即使存在该消息,套接字的本地绑定也能工作。它只是没有达到SO_ BINDTODEVICE级别。