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

发布于 2024-11-08 12:12:38 字数 245 浏览 1 评论 0原文

我需要将一个用 Python 编写的简单脚本嵌入到我的 C 应用程序中。该脚本只是从互联网下载一些内容,对其进行解析并将结果打印到标准输出中。我需要绑定脚本建立的每个连接的传出 IP 地址,以利用服务器提供的许多 IP 地址。我可以使用 Python/C API 或 C system()/execve() 函数。我宁愿不修改脚本本身,因为它使用 liburl2,它不支持直接绑定本地 IP。

我会很感激每一个提示。

问候, 米哈尔·皮特拉斯.

I need to embed a simple script written in Python into my C application. The script simply downloads some content from the Internet, parses it and prints result into stdout. I need to bind outgoing IP address of every connection made by script, to make use of many IP addresses provided with a server. I can use either Python/C API or C system()/execve() functions. I prefer to do not modify a script itself since it uses liburl2 which doesn't support binding local IP directly.

I would be grateful for every hint.

Regards,
Michal Pietras.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

り繁华旳梦境 2024-11-15 12:12:38

您的问题在这里得到解答:Python 和 urllib2 的源接口

You question is answered here: Source interface with Python and urllib2

尐偏执 2024-11-15 12:12:38

您只需执行描述的代码即可设置传出 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 地址。

You can set the outgoing IP address with out editing the python source code simply by executing the code described here as a string in the interpreter before running the embedded code. Something like this would work:

#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;
}

Of course you would replace 127.0.0.1 with the correct source IP address.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文