52 lines
1.3 KiB
Python
52 lines
1.3 KiB
Python
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
|