Привет, сетевой друг! Сегодня про Network Insight - TypeScript-библиотеку, которая собирает сетевую информацию прямо из приложения.🟣Она умеет определить публичный IP, посмотреть сетевые интерфейсы машины, получить геолокацию IP и собрать всё это в один объект:
const networkService = NetworkService.getInstance();
const info = await networkService.getFullNetworkInfo();
console.log(info);
В ответ можно получить клиентский и публичный IP, город и страну, координаты, timezone и данные интерфейсов вроде
eth0 с адресом, маской, MAC и CIDR.🟣Отдельно интересна работа с Express. Библиотека сразу даёт готовый роутер:
app.use('/api/network', createNetworkRouter());После этого появляются
/ip, /public-ip, /location, /interfaces, /full и /health.То есть не нужно каждый раз писать собственные обработчики для сетевой диагностики.
🟣Публичный IP библиотека получает через несколько внешних провайдеров с fallback-механизмом и кэшированием. Если один сервис не отвечает, можно попробовать другой, а повторные запросы не обязательно уходят наружу.
Для геолокации используется похожая схема с провайдерами, а TTL кэша можно менять прямо во время работы:
networkService.updateConfig({
cache: { ttl: 120000 }
});🟣Есть и более практичный вариант - middleware. Можно один раз добавить сетевую информацию в
req и использовать её дальше в приложении:req.network = {
clientIp: networkService.getClientIp(req),
service: networkService
};Заодно библиотека умеет делать health check отдельно для IP-сервисов, геолокации и локальной сетевой информации.
🟣Под капотом всё написано на TypeScript, есть CommonJS и ESM, декларации типов, Jest-тесты и заявлено 100% покрытие основных модулей.
По сути, Network Insight закрывает типичный набор задач, для которых обычно приходится отдельно подключать
os.networkInterfaces(), сервис определения IP, API геолокации и писать вокруг всего этого свою обвязку.Серверная Админа | Zeroday | #Инструмент
