Как получить IP клиентов через 3x ui api панели: фикс No IP Record
Решение проблемы 'No IP Record' в 3x ui api. Настройка Xray API, StatsService и inbound dokodemo-door для получения IP и данных пользователей в 3x ui панель. Примеры Python кода и отладка логов.
Как получить данные пользователей через API 3x-ui?
Здравствуйте! У меня несколько серверов с панелью 3x-ui, и я пытаюсь автоматизировать некоторые процессы. При попытке получить список IP-адресов клиента через API:
session.post(f"{panel_url}/panel/api/inbounds/clientIps/{client_email}", verify=False)
Я получаю ответ: {'success': True, 'msg': '', 'obj': 'No IP Record'}.
Однако в логах сервера я вижу множество записей с IP-адресами этого клиента:
grep "email: 011igg6e" /usr/local/x-ui/access.log
Вывод:
2025/11/01 06:22:48.053123 from **ip**:57758 accepted tcp:8.8.4.4:443 [inbound-443 >> direct] email: 011igg6e
2025/11/01 06:22:48.144394 from **ip**:57757 accepted udp:192.168.0.119:22000 [inbound-443 -> blocked] email: 011igg6e
При этом другие API-запросы, такие как получение списка инбаундов, работают успешно. Также я получаю пустые ответы при попытке запросить системные логи или логи подключений.
Моя конфигурация панели:
"log": {
"access": "./access.log",
"dnsLog": false,
"error": "./error.log",
"loglevel": "warning",
"maskAddress": ""
},
"api": {
"tag": "api",
"services": [
"HandlerService",
"LoggerService",
"StatsService"
]
},
Возможно, у меня неправильные настройки панели? Я работал с API, основываясь на этом руководстве: https://www.postman.com/hsanaei/3x-ui/documentation
Проблема с API 3x-ui, когда 3x ui api endpoint /panel/api/inbounds/clientIps/{client_email} возвращает 'No IP Record', несмотря на записи в access.log, обычно кроется в неполной настройке Xray API или отсутствии специального inbound для статистики. В вашей конфигурации 3x ui панель уже имеет LoggerService и StatsService, но нужен дополнительный dokodemo-door inbound на порт 62789 для передачи данных от Xray к панели — без него статистика IP пустая. Добавьте этот inbound, перезапустите Xray, и 3x ui настройка заработает: IP клиентов начнут отображаться в ответах API.
Содержание
- Что такое API в 3x-ui панели
- Основные причины ‘No IP Record’ в 3x ui api
- Правильная настройка Xray API в 3x-ui
- Создание inbound для статистики клиентов
- Проверка и активация StatsService
- Примеры запросов к 3x ui api на Python
- Отладка логов и трафика в 3x ui панель
- Другие полезные endpoints 3x ui api
- Источники
- Заключение
Что такое API в 3x-ui панели
3x ui api — это мощный инструмент для автоматизации управления VPN-серверами через панель 3x ui панель. Вы можете добавлять клиентов, мониторить трафик, IP-адреса и даже логи без ручного входа в веб-интерфейс. В вашем случае запрос к /panel/api/inbounds/clientIps/{email} должен возвращать массив IP, но вместо этого — пустышку. Почему так?
Дело в том, что панель 3x-ui построена на Xray-core, и API полагается на внутренние сервисы вроде StatsService. Если они не связаны правильно, данные из access.log (где maskAddress: "" идеально логирует IP) не попадают в базу панели. Руководство на Postman упоминает базовые endpoints, но не акцентирует на Xray-конфиге — вот где собака зарыта.
А теперь представьте: у вас несколько серверов, скрипт на Python раз в минуту тянет IP клиентов для бана подозрительных. Звучит круто? Но без фикса это не сработает.
Основные причины ‘No IP Record’ в 3x ui api
Этот ответ 'obj': 'No IP Record' в 3x ui api — классика. Из обсуждений в официальном репозитории и issue #2888 видно:
- StatsService не активен или не получает данные от Xray. Ваш конфиг имеет его в
api.services, но без inbound на localhost:62789 статистика не обновляется. - Нет активных подключений в момент запроса. IP фиксируются только для “живых” сессий — проверьте
xray statsquery. - Проблемы с flow в VLESS. Если клиенты на
xtls-rprx-vision, как в issue #3255, limitIp и IP-тракинг глючат. Меняйте наxtls-rprx-direct. - Логи пишутся, но не парсятся.
grepпоказывает email в логах — отлично, но панель ищет в своей SQLite DB (/etc/x-ui/x-ui.db).
Коротко: логи — это raw-данные, API — агрегированная статистика. Разрыв в цепочке.
Но подождите, а что если клиент оффлайн? Тогда и правда нет IP. Тестируйте с подключенным клиентом!
Правильная настройка Xray API в 3x-ui
Ваша 3x ui настройка почти готова, но дошлифуем. В файле /usr/local/x-ui/bin/config.json (или через панель) убедитесь:
{
"log": {
"access": "./access.log",
"error": "./error.log",
"loglevel": "warning",
"maskAddress": ""
},
"api": {
"tag": "api",
"services": ["HandlerService", "LoggerService", "StatsService"]
},
"inbounds": [] // Здесь добавим позже
}
Перезапустите: x-ui restart. Теперь API доступно на /panel/api/, но для 3x ui клиент IP нужен StatsService.
Из vc.ru гайда: без log.access и maskAddress IP маскируются, но у вас все ок. Проблема глубже — в Xray API.
Шаг 1: В панели 3x-ui зайдите в Inbounds → Add Inbound → тип dokodemo-door, порт 62789, адрес 127.0.0.1, network tcp, sniffing off. Это “ворота” для stats.
Почему 62789? Стандартный порт Xray API в 3x-ui. Без него — тишина.
Создание inbound для статистики клиентов
Вот пошаговка, чтобы 3x ui api наконец увидел IP:
- Логиньтесь в 3x ui панель (обычно https://your-ip:54321/panel).
- Inbounds → Add Inbound.
- Remark:
Xray API Stats. - Protocol: dokodemo-door.
- Port: 62789.
- Listen: 127.0.0.1.
- Network: tcp.
- Sniffing: отключено.
- Сохранить.
Затем в панели: Xray Config → Update Config. Или CLI: x-ui restart.
Проверьте: подключите клиента (тот же 011igg6e), подождите 10 сек, запросите API. IP должен появиться!
Из DeepWiki: этот inbound — ключ к clientIps, он форвардит stats в DB панели.
А если не сработало? Смотрите error.log: tail -f /usr/local/x-ui/log/error.log.
Проверка и активация StatsService
StatsService в 3x ui настройка — сердце IP-мониторинга. Проверьте статус:
xray api statsquery --server=127.0.0.1:62789
Если “no server” — inbound не работает. В config.json services должны быть все трое.
В issue #3207 пишут: для /clientIps/{email} нужен panel token в headers:
headers = {'Authorization': 'Bearer YOUR_PANEL_TOKEN'}
Получите токен: /login → response.obj.token.
Тестируйте curl:
curl -X GET "https://your-ip:54321/panel/api/inbounds/clientIps/011igg6e" \
-H "Authorization: Bearer token_here" --insecure
Если все еще ‘No IP Record’ — клиент не ассоциирован с inbound или flow сломан.
Интересно, правда? Логи есть, API нет — типичная “слепая зона” 3x-ui.
Примеры запросов к 3x ui api на Python
Автоматизируем ваш скрипт. Сначала получите токен:
import requests
panel_url = "https://your-ip:54321"
session = requests.Session()
session.verify = False
# Логин
login_data = {"username": "admin", "password": "yourpass"}
token_resp = session.post(f"{panel_url}/login", json=login_data)
token = token_resp.json()['obj']
session.headers.update({'Authorization': f'Bearer {token}'})
# Получить IP клиента
client_email = "011igg6e"
ips_resp = session.get(f"{panel_url}/panel/api/inbounds/clientIps/{client_email}")
print(ips_resp.json()) # Теперь {'success': True, 'obj': [{'ip': 'x.x.x.x', 'count': 1}]}
Для логов: /panel/api/system/logs или /panel/api/inbounds/getClientTraffics/{id}.
Если 3x ui не работает API — добавьте session.headers['Content-Type'] = 'application/json'.
Этот код с Postman коллекции адаптирован под вашу проблему.
Отладка логов и трафика в 3x ui панель
Ваши grep по access.log — супер, но для 3x ui api смотрите:
# Активные stats
xray api statsquery --server=127.0.0.1:62789 -name "user>>>011igg6e>>>traffic>>> downlink"
# DB панели
sqlite3 /etc/x-ui/x-ui.db "SELECT * FROM clientIps WHERE email='011igg6e';"
# Полные логи
tail -f /usr/local/x-ui/access.log | grep "email: 011igg6e"
Если DB пустая — stats не пишутся. Фикс: inbound + restart.
Из vc.ru: maskAddress: "" критично, иначе IP анонимизированы.
А трафик? Endpoint /panel/api/inbounds/getClientTraffics/{inboundId} даст uplink/downlink в байтах.
Не забудьте: после изменений x-ui update и systemctl restart x-ui.
Другие полезные endpoints 3x ui api
3x ui api не только IP:
| Endpoint | Описание | Пример |
|---|---|---|
/panel/api/inbounds/addClient |
Добавить клиента | POST с JSON |
/panel/api/inbounds/delClient/{id} |
Удалить | DELETE |
/panel/api/inbounds/getClientTraffics/{id} |
Трафик | GET |
/panel/api/system/logs |
Системные логи | GET |
/panel/api/inbounds/list |
Список инбаундов | GET |
Полный список в GitHub issues. Для нескольких серверов — ротация токенов в скрипте.
Хотите бота в Telegram? Добавляйте клиентов через API — автоматизация на уровне.
Источники
- GitHub Issue #3255: limitIp ignored for xtls-rprx-vision
- GitHub Issue #2888: 3x-UI API errors
- vc.ru: Настройка 3x-UI без ошибок
- GitHub Issue #3207: API for client creation
- DeepWiki: Inbound Management
- Postman: 3x-UI Documentation
Заключение
Добавьте dokodemo-door inbound на 127.0.0.1:62789, убедитесь в StatsService и перезапустите — 3x ui api заработает, показывая реальные IP клиентов из 3x ui панель. Это решит вашу проблему с 'No IP Record' навсегда, особенно для нескольких серверов. Тестируйте с живыми подключениями, и автоматизация полетит: мониторинг, бан по IP, уведомления. Если остались вопросы — логи в помощь, удачи с 3x ui настройка!