- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
大家好,
我的问题:我想为不存在的 IP 地址启动 (tftp) 服务器。该服务器适用于 USB/RNDIS,其 IP 地址本质上仅在存在实际网络流量时才存在 - 但我想“尽早”启动服务器(例如,当 Windows 启动时)。
想法是将套接字绑定(bind)()到 0.0.0.0 - 然后检查每个请求是否有“有效”地址。
这种方法的问题:recfrom() 只返回源地址(客户端),但不返回目标地址(服务器)!
我如何获取该客户端与之通话的 IP 地址?(我当然可以至少检查相同的子网,但我需要该客户端正在与之通信的真实服务器地址!)
或者,是否有任何选项可以让bind()使用不存在的IP地址?
干杯。
附:这是用于 Python tftpy 服务器的...-- 目前我需要在启动服务器时从客户端 ping,这很无聊......
最佳答案
无法直接获取本地地址,但有一个通常对您有用的技巧。
假设您刚刚从 recvfrom
获取了缓冲区和客户端地址。现在,您创建一个新辅助UDP套接字,将其连接
到客户端的地址,然后使用getsockname
获取这个新套接字上的本地地址。 (使用 UDP,connect
实际上并不向对等方发送任何内容,它只是进行地址解析。)
通过这种方式,您可以发现服务器系统将使用作为源的IP地址,以便将数据报发送回客户端系统。这通常与客户端用于定位服务器的地址相同。
>>> cbytes, caddr = server_sock.recvfrom(2048)
>>> print(caddr) # Client IP and port
('192.168.0.11', 38869)
>>> aux_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
>>> aux_socket.connect((caddr[0], 9999)) # Connect back to client (port doesn't matter)
>>> saddr = aux_socket.getsockname() # Get local IP and port (ignore port here too)
>>> print(saddr)
('192.168.0.12', 39753)
这适用于 Linux。我不能 100% 确定它在 Windows 上会以同样的方式工作,但似乎可以合理地预期它会如此。
关于python - (Python/TFTP-Server)如何监听(尚未)现有的IP地址(RNDIS)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47655674/
我在 TI Davinci dm365 板上使用 Linux 内核构建摄像机。 此板支持 RNDIS 驱动程序,因此我的相机可以在 Windows 中“即插即用”。这是某种“USB 以太网”网络适配器
我正在开发一个 RNDIS 复合设备,其中包括一个 RNDIS 设备、一个 usbnet 设备、一个调制解调器设备和一个自定义 CDC 设备。 PC 运行 Win7 32 位,我使用的是默认的 RND
首先:我对这种工作完全是新手。 我有一个 USB rndis某些硬件的设备驱动程序只能在 XP/2000/Vista 中工作。但我想把它移植到 CE 或 Linux,供应商也说开发人员应该这样做。 总
linux cdc_ecm驱动和rndis协议(protocol)有什么关系? cdc_ecm 是否以任何方式基于微软的 rndis 规范? 来自此维基页面 https://en.wikipedia.
大家好, 我的问题:我想为不存在的 IP 地址启动 (tftp) 服务器。该服务器适用于 USB/RNDIS,其 IP 地址本质上仅在存在实际网络流量时才存在 - 但我想“尽早”启动服务器(例如,当
我必须在基于 Linux 的主板和主机(可以是 WinXP/Win7/Ubuntu 等)之间建立 RNDIS 连接。 当我使用 RNDIS 电缆连接电路板时,所有主机都识别并开始解析 IP 地址。在主
我正在尝试弄清楚如何在 RNDIS Usb Gadget 上自动设置零配置网络地址。 目前当我插入设备时,我必须在设备上 $ modprobe g_ether $ ifconfig usb0 up $
我是一名优秀的程序员,十分优秀!