为Python解释器的每个连接绑定输出IP地址

2 投票
2 回答
2045 浏览
提问于 2025-04-16 18:05

我需要把一个用Python写的简单脚本嵌入到我的C程序里。这个脚本的功能很简单,就是从网上下载一些内容,解析这些内容,然后把结果打印到标准输出上。我需要把脚本每次连接时使用的外部IP地址绑定起来,这样就能利用服务器提供的多个IP地址。我可以使用Python/C的接口或者C语言的system()/execve()函数。我更倾向于不修改脚本本身,因为它使用的liburl2库不支持直接绑定本地IP。

如果有任何建议,我将非常感激。

祝好,
Michal Pietras。

2 个回答

0

你可以通过在运行嵌入的代码之前,在解释器中执行一段代码来设置发出的IP地址,而不需要修改Python的源代码。你可以参考这里的内容。像下面这样就可以:

#include <Python.h>

int main(int argc, char *argv[]) {
  Py_SetProgramName(argv[0]);
  Py_Initialize();
  PyRun_SimpleString
    ("import socket\n"
     "true_socket = socket.socket\n"
     "def bound_socket(*a, **k):\n"
     "    sock = true_socket(*a, **k)\n"
     "    sock.bind((127.0.0.1, 0))\n"
     "    return sock\n"
     "socket.socket = bound_socket\n");

  // Run embedded code here

  Py_Finalize();
  return 0;
}

当然,你需要把127.0.0.1替换成正确的源IP地址。

1

你的问题在这里得到了回答:使用Python和urllib2的源接口

撰写回答