You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Ubuntu生产服务器访问Windows主机的localhost/127.0.0.1?

如何从Ubuntu服务器访问Windows主机本地的Mantra MFS100生物识别服务?

需求与现状

  • 需要从连接在客户Windows PC的Mantra MFS100生物识别设备获取数据,返回至Ubuntu生产服务器
  • 根据Mantra文档,该生物识别服务运行在Windows本地127.0.0.1,端口范围为11100-11120
  • 在Windows本地(PyCharm IDE)中,以下代码可正常完成服务发现和数据捕获:

本地Windows环境可用代码

服务发现代码

import requests

for port in xrange(11100, 11122, 1):
    response = requests.request('RDSERVICE', 'http://localhost:%s' % str(port), headers=headers, data=data)
    if response.status == "READY":
        device_port = port
    if port == 11121:
        print "Fingerprint device is not connected"

数据捕获代码

import requests

response = requests.request('CAPTURE', 'http://localhost:%s/rd/capture' % device_port, headers=headers, data=data)
print response.text

遇到的连接问题

从Ubuntu服务器访问时出现连接拒绝错误:

HTTPConnectionPool(host='127.0.1.1', port=11100): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f677d12cf10>: Failed to establish a new connection: [Errno 111] Connection refused',))

尝试使用socket.gethostbyname(socket.gethostname())获取IP作为端点也无效:

import requests
import socket

ip_address = socket.gethostbyname(socket.gethostname())
response = requests.request('CAPTURE', 'http://%s:%s/rd/capture' % (ip_address, device_port), headers=headers, data=data)

请求与响应格式

请求示例

RDSERVICE * HTTP/1.1
HOST: http://127.0.0.1:[port]
EXT: APP_NAME

响应示例

HTTP/1.1 200 OK
CACHE-CONTROL:no-cache
LOCATION:http://127.0.0.1:<rd_service_port>
Content-Length: length in bytes of the body
Content-Type: text/xml
Connection: Closed
<RDService status="READY|USED|NOTREADY|..." info="provider info for display purposes">
<Interface id="CAPTURE" path="/rd/capture" />
<Interface id="DEVICEINFO" path="/rd/info" />
</RDService>

解决方案

1. 修改Mantra服务绑定IP

Mantra服务默认仅绑定127.0.0.1,只能本地访问。需修改服务配置(参考Mantra官方文档或服务设置界面),将其绑定到Windows主机的局域网公网IP(如192.168.x.x)或0.0.0.0(允许所有IP访问)。

2. 开放Windows防火墙端口

打开Windows Defender防火墙,创建入站规则:

  • 允许TCP协议的11100-11120端口连接
  • 规则应用范围选择对应网络环境(域/专用网络)

3. 使用Windows主机实际IP访问

修改Ubuntu端Python代码,将请求地址中的localhost替换为Windows主机的真实IP:

# 服务发现代码修改
windows_ip = "192.168.1.100"  # 替换为Windows主机的实际局域网/公网IP
for port in range(11100, 11122):
    response = requests.request('RDSERVICE', f'http://{windows_ip}:{port}', headers=headers, data=data)
    if response.status == "READY":
        device_port = port
        break
else:
    print("Fingerprint device is not connected")

# 数据捕获代码修改
response = requests.request('CAPTURE', f'http://{windows_ip}:{device_port}/rd/capture', headers=headers, data=data)
print(response.text)

若Windows主机处于NAT网络(如家庭路由器后),需在路由器上设置端口转发,将11100-11120端口转发到Windows主机的局域网IP。

4. 可选:使用隧道工具(无公网IP场景)

如果无法直接暴露Windows主机端口,可使用隧道工具建立公网访问通道:

  • 在Windows上运行ngrok,映射本地端口:ngrok http 11100 -region ap(按需调整端口和区域)
  • Ubuntu服务器使用ngrok提供的公网地址发起请求

内容的提问来源于stack exchange,提问作者Rithik Sandron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:25:17