如何在特定接口上使用cURL

yyyllmsg  于 2023-01-05  发布在  其他
关注(0)|答案(3)|浏览(188)

我正在用c语言开发一个代码,它使用curl实用程序简单地将文件FTP到FTP服务器上,方法如下:example
现在我有一件简单的事情要做,指定curl使用服务器的特定接口(IP)进行上传,因为服务器的其他接口与其他套接字连接相关联。
有什么办法吗?

s1ag04yj

s1ag04yj1#

curl似乎支持--interface选项

curl --interface eth0
v2g6jxz6

v2g6jxz62#

对于来到这里寻找相同答案的任何人,除了wlan0或Raspberry/RPi上的任何非默认接口,您将需要sudo或以root身份运行。
在我的例子中,我运行eth0和wlan0,但eth0是我的默认NIC。Ping没有sudo也能工作,curl没有足够详细的日志记录,只是说连接超时,只有在eth0上没有sudo才能工作。当错误显示"setsockopt SO_BINDTODEVICE:不允许操作"

vxqlmq5t

vxqlmq5t3#

查看您的适配器,所有适配器都应该有一个IP地址,只需在curl查询中使用IP地址。在我的情况下,我只有一个真实的的适配器,所以我不确定如何指定辅助接口,所以我使用了grecurl--接口帮助,您可以指定IP地址--甚至更好

# ip a<enter>

ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group de                                              fault qlen 1000
link/ether 00:50:56:9e:2a:42 brd ff:ff:ff:ff:ff:ff
inet 172.16.99.25/24 brd 172.16.99.255 scope global ens160
   valid_lft forever preferred_lft forever
inet 172.16.99.26/24 brd 172.16.99.255 scope global secondary ens160
   valid_lft forever preferred_lft forever
inet6 fe80::250:56ff:fe9e:2a42/64 scope link
   valid_lft forever preferred_lft forever

eric@mx:~$ curl --help | grep interface
 --dns-interface <interface> Interface to use for DNS requests
 --interface <name> Use network INTERFACE (or address)

# curl https://ipinfo.io/ip<enter> 
<This shows what your default external IP is>

curl --interface 172.16.99.26 https://ipinfo.io/ip
curl --interface 172.16.99.25 https://ipinfo.io/ip

在我的服务器上,我得到了不同的答案,因为我有(2)不同的NAT的外部IP
不得不分享,也许这会帮助别人。

相关问题