Этот вопрос закрыт для ответов, так как повторяет вопрос Docker: Как увидеть локальную сеть из контейнера?
nnnLik
@nnnLik
Capybara god

Как внутри докера найти ip камеры локальной сети?

import os
import re
import netifaces
from wsdiscovery.discovery import ThreadedWSDiscovery as WSDiscovery

from fastapi import FastAPI
import uvicorn

app = FastAPI()


class OnvifCamera:
    def __init__(self):
        self.started = False
        self.ips = list()
        for iface in netifaces.interfaces():
            if netifaces.AF_INET in netifaces.ifaddresses(iface):
                self.ips.append(
                    netifaces.ifaddresses(iface)[netifaces.AF_INET][0]["addr"]
                )
        self.scope = [".".join(ip.split(".")[:2]) for ip in self.ips]
        self.wsd = WSDiscovery()

    def start(self):
        self.wsd.start()
        self.ret = self.wsd.searchServices()
        self.onvif_services = [
            s for s in self.ret if str(s.getTypes()).find("onvif") >= 0
        ]
        self.urls = [ip for s in self.onvif_services for ip in s.getXAddrs()]
        self.ips = [
            ip for url in self.urls for ip in re.findall(r"\d+\.\d+\.\d+\.\d+", url)
        ]
        self.lst = [ip for ip in self.ips if ip.startswith("192.168.1.")]

        return self.lst


onvif_camera = OnvifCamera()


@app.get("/")
def get_cameras():
    result = onvif_camera.start()
    return {"cameras": result}


if __name__ == "__main__":
    uvicorn.run(app, port=8800)


Код выше выводит список всех ip камер подключенных к сети с поддержкой onvif. Код работает но только без докера, начав использовать докер возникает проблема, что мой код пытается обнаружить IP-камеры в сети, но работает внутри контейнера Docker, который имеет собственный сетевой стек. В результате он не может видеть IP-камеры в хост-сети.
  • Вопрос задан
  • 165 просмотров
Ответы на вопрос 1
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы