连接Arduino通过防火墙代理访问互联网

5
我有一台带以太网盾的Arduino。
如何在防火墙代理网络下连接到互联网?
例如,Arduino Ethernet库仅提供参考示例,说明如何将您的板连接到互联网,但没有提示如何通过防火墙代理等操作实现。
摘自Arduino帮助页面。
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 10, 0, 0, 177 };
byte server[] = { 64, 233, 187, 99 }; // Google

Client client(server, 80);

void setup()
{
  Ethernet.begin(mac, ip);
  Serial.begin(9600);

  delay(1000);

  Serial.println("connecting...");

  if (client.connect()) {
    Serial.println("connected");
    client.println("GET /search?q=arduino HTTP/1.0");
    client.println();
  } else {
    Serial.println("connection failed");
  }
}

void loop()
{
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
      ;
  }
}

可以看出,在这里无法解决穿越防火墙代理的TCP连接问题。
另外,我很好奇在上述情况下TCP连接是如何穿越防火墙代理解决的,希望能提供一些合适的参考资料。

我不确定这是否适合在服务器故障上发布。问题涉及太多方面,如“解释防火墙”,“给我示例代码”等。 - Jeff Atwood
修改问题以获得更清晰的表述。 - Ashish Sharma
2个回答

6
如果您想通过代理连接,请使用代理服务器名称作为您要连接的地址,并将服务器地址作为GET请求的一部分包含进去:
// if you get a connection, report back via serial:
if (client.connect("www.proxy.com", 8080)) {  // This is connecting to the proxy
Serial.println("connected");

// Make a HTTP request through proxy:
client.println("GET http://www.actualserver.com/search?q=arduino HTTP/1.0");
client.println();

原始答案在这里

0

Client 类不支持 SOCKS 和 HTTP 代理。您需要自己修改 Ethernet.h 中的代码。


答案在技术上是正确的(现有库不支持代理),但它没有提供解决方案(就像得到5个赞的答案那样)。 - Tim Holt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接