import platform import socket from fastapi import FastAPI, Header, Request import netifaces app = FastAPI() @app.get("/") def root(request: Request, x_full_response: bool = Header(False)): response = { "method": request.method, "url": { "url": request.url._url, "scheme": request.url.scheme, "hostname": request.url.hostname, "port": request.url.port, "path": request.url.path, }, "headers": request.headers, "client": { "ip-address": request.client.host, "port": request.client.port, }, "host": { "hostname": platform.node(), "fqdn": socket.getfqdn(), } } if not x_full_response: return response interfaces = {} for interface in netifaces.interfaces(): interfaces[interface] = [] for link in netifaces.ifaddresses(interface).values(): for group in link: interfaces[interface].append(group['addr']) response["host"].update({ "python": platform.python_version(), "os": { "system": platform.system(), "release": platform.release(), "version": platform.version(), }, "ip-addresses": interfaces, }) return response