以非root用户身份运行此命令:
curl --interface tun0 http://google.com -v
SO_BINDTODEVICE tun0失败,错误1:不允许操作; 会做常规绑定
在php中设置curl_setopt($ch, CURLOPT_INTERFACE "tun0")
也不起作用。但是,
ping -I tun0 google.com
工作正常,所以这只是curl的一个问题。它甚至适用于root的curl,但它确实适用于非root用户。
我有一个openpvn接口tun0
,但lo
接口也是如此。
这种情况发生在多个系统上,因此--interface选项只是在curl中打破了,还是我应该以其他方式使用它?我是否应该为curl启用特殊功能才能使用界面?
答案 0 :(得分:2)
我认为您没有正确解释详细信息。
curl的--interface
选项要求它将套接字的本地端绑定到特定的IP /网络接口。
使用正常bind()
调用绑定套接字。
另外到bind()调用,linux提供了SO_BINDTODEVICE
setsockopt选项,它是一种更好,更完整的绑定接口。然而,这个调用需要root访问才能工作,大多数libcurl使用应用程序都没有,然后它将在详细输出中使用上面提到的文本失败。
因此,套接字的本地绑定甚至可以与存在的消息一起工作。它只是没有达到SO_BINDTODEVICE级别。