BusyBox is used for several system utilities in OpenWrt like ash shell, cp, ls, echo, ping and many others.
It provides tiny replacements with fewer options for most of the utilities from GNU Core Utilities, GNU Inetutils and other essential tools like gzip.
All this utilities are compiled as “applets” into a single binary file /bin/busybox.
When an OpenWrt system tries to obtain an IP using DHCP on its WAN interface, it adds a Vendor-Class option that contains the Busybox version:
Vendor-Class Option 60, length 12: “udhcp 1.28.3”
This can be used to estimate which OpenWrt version is running on a router if you don’t have access to the router itself.
| OpenWrt version | Busybox version |
|---|---|
| 7.06 | 1.4.2 |
| 7.07 | 1.4.2 |
| 7.09 | 1.4.2 |
| 8.09 | 1.11.2 |
| 8.09.1 | 1.11.2 |
| 8.09.2 | 1.11.2 |
| 10.03 | 1.15.3 |
| 10.03.1 | 1.15.3 |
| 12.09 | 1.19.4 |
| 17.01.0 | 1.25.1 |
| 17.01.1 | 1.25.1 |
| 17.01.2 | 1.25.1 |
| 17.01.3 | 1.25.1 |
| 17.01.4 | 1.25.1 |
| 17.01.5 | 1.25.1 |
| 17.01.6 | 1.25.1 |
| 17.01.7 | 1.25.1 |
| 18.06.0 | 1.28.3 |
| 18.06.1 | 1.28.3 |
| 18.06.2 | 1.28.4 |
| 18.06.3 | 1.28.4 |
| 18.06.4 | 1.28.4 |
| 18.06.5 | 1.28.4 |
| 19.07.0 | 1.30.1 |
На чтение 4 мин Опубликовано Обновлено
Busybox — это утилита, которая представляет собой компактный набор исполняемых файлов, объединенных в один. Этот инструмент используется во многих встраиваемых системах, включая роутеры, чтобы предоставлять полезные команды и утилиты для управления устройством.
Зная команды Busybox, вы сможете управлять вашим роутером и настраивать его работу. В статье представлен полный список команд Busybox и их описание, которые можно использовать на роутере для выполнения таких операций, как настройка сетевых параметров, управление файлами и процессами, а также многое другое.
cat — команда для чтения содержимого файлов.
cd — команда для изменения текущего рабочего каталога.
chmod — команда для изменения прав доступа к файлам и директориям.
cp — команда для копирования файлов или директорий.
grep — команда для поиска текста в файлах или выводе других команд.
ifconfig — команда для настройки и просмотра сетевых интерфейсов.
kill — команда для отправки сигнала процессу или завершения процессов.
ls — команда для вывода списка файлов и директорий в текущем рабочем каталоге.
mkdir — команда для создания новых директорий.
mv — команда для перемещения или переименования файлов или директорий.
ping — команда для проверки доступности хостов в сети.
reboot — команда для перезагрузки роутера.
rm — команда для удаления файлов или директорий.
И это лишь некоторые из команд, предоставляемых Busybox. Знакомство с этим набором команд позволит вам более эффективно управлять вашим роутером и настраивать его работу под свои нужды.
Приведенный список может различаться в зависимости от модели и прошивки вашего роутера.
Содержание
- Основные команды busybox в роутере
- Список и описание команд
- Примеры использования команд
Основные команды busybox в роутере
- cd: изменить текущую директорию.
- ls: вывести содержимое текущей директории.
- mkdir: создать новую директорию.
- rm: удалить файл или директорию.
- cp: скопировать файл.
- mv: переместить файл или переименовать его.
- cat: вывести содержимое файла.
- echo: вывести текст на экран или записать его в файл.
- grep: найти строки, соответствующие заданному шаблону.
- chmod: изменить права доступа к файлу.
- chown: изменить владельца файла или директории.
- ifconfig: вывести информацию об IP-адресе и сетевых интерфейсах.
- ping: выполнить ICMP запрос к заданному хосту.
- route: вывести или изменить таблицу маршрутизации.
- telnet: установить Telnet соединение с удаленным хостом.
- reboot: перезагрузить роутер.
Это лишь небольшая часть команд, доступных в BusyBox, их список может различаться в зависимости от версии и настроек вашего роутера. Уточните доступные команды в документации вашего устройства.
Примечание: для выполнения большинства команд необходимы права суперпользователя (root).
Список и описание команд
addgroup: добавляет новую группу пользователей.adduser: добавляет нового пользователя.ash: интерпретатор командной строки.cat: выводит содержимое файлов.chmod: изменяет права доступа к файлам и директориям.chown: изменяет владельца и группу файлов и директорий.cmp: сравнивает два файла байтовыми сравнениями.cp: копирует файлы и директории.date: выводит текущую дату и время.df: выводит информацию о доступном месте на диске.echo: выводит текст на экран или в файл.grep: ищет строки, соответствующие заданному шаблону.head: выводит первые строки указанного файла.ifconfig: выводит информацию о сетевых интерфейсах.kill: отправляет сигнал процессу.ln: создает жесткую или символическую ссылку на файл.ls: выводит список файлов и директорий.mkdir: создает директорию.mv: перемещает или переименовывает файлы и директории.ping: отправляет ICMP эхо-запросы на указанный хост.ps: выводит список текущих процессов.reboot: перезагружает систему.rm: удаляет файлы и директории.rmdir: удаляет директорию.sed: выполняет редактирование потока текста.touch: создает файл.umount: отключает файловую систему.uname: выводит информацию о системе.wget: загружает файлы по сети.
Примеры использования команд
Ниже приведены примеры использования некоторых команд BusyBox:
- Команда
lsиспользуется для отображения содержимого директории. Например,ls /binвыведет список файлов в директории/bin. - Команда
pwdпозволяет вывести текущую рабочую директорию. Например,pwdвернет путь к текущей директории. - Команда
cdиспользуется для изменения текущей директории. Например,cd /usr/localперейдет в директорию/usr/local. - Команда
cpкопирует файлы и директории. Например,cp file1.txt file2.txtсоздаст копию файлаfile1.txtс именемfile2.txt. - Команда
mvперемещает файлы и директории. Например,mv file1.txt /home/user/переместит файлfile1.txtв директорию/home/user/. - Команда
rmудаляет файлы и директории. Например,rm file.txtудалит файлfile.txt. - Команда
mkdirсоздает новую директорию. Например,mkdir new_dirсоздаст директорию с именемnew_dir.
Это только небольшой список команд, доступных в BusyBox. Они представляют лишь некоторые возможности, которые вы можете использовать при работе с этим программным обеспечением. Рекомендуется ознакомиться с полным списком команд и описанием их функций в официальной документации BusyBox.
Как получить полный контроль, над роутером ASUS с установленной оригинальной (заводской) прошивкой, через командную строку с помощью Telnet протокола доступа.
Для получения больших возможностей по настройке роутера многие тут-же прошивают роутер альтернативной прошивкой, такой как DDWRT, OpenWRT и другие. Но не всегда это оправдано. Вэб-интерфейс оригинальной прошивки может не содержать каких-то триггеров но в самой прошивки есть многие необходимые утилиты.
Значит, мы можем проделать все манипуляции над роутером с оригинальной (заводской) прошивкой, через командную строку с помощью Telnet протокола доступа.
Самый безопасный и мощный способ это использовать SSH протокол, но можно воспользоваться не безопасным Telnet так, как он имеется во всех роутерах ASUS.
Если вэб-интерфейс вашего роутера не имеет триггера для включения Telnet, то вам необходимо прочитать эту статью: «Как включить Telnet сервер на роутере ASUS».
Получение доступа к командной строке
Прежде всего вам нужно подключиться к роутеру используя любой Telnet клиент, например PuTTY или консольный клиент.
Домен, IP-адрес, логин и пароль такие же как в вэб-интерфейсе роутера.
- IP-адрес —
192.168.1.1(или тот который вы установили). - Домен —
router.asus.com(стандартный для ASUS роутеров) - Порт —
23(стандартный для Telnet протокола). - Имя пользователя (логин) —
admin(стандартный для ASUS роутеров). - Пароль — тот который вы установили (стандартный для ASUS роутеров —
admin).
Для подключения с помощью консольного клиента:
Откройте терминал.
Подключитесь к роутеру по протоколу доступа Telnet:
Для авторизации используйте логин и пароль такие же как в вэб-интерфейсе роутера:
Trying 192.168.1.1... Connected to 192.168.1.1. Escape character is '^]'. # |
Поздравляю, теперь вы в командной строке Linux роутер!
В роутере
Теперь вы в командной строке Linux роутера ASUS.
В общем, Linux роутер очень похож на Debian но имеет некоторые особенности. Начну с общего.
Показать информацию о железе и прошивке роутера можно так:
Linux version 2.6.30.9 (root@wireless-desktop) (gcc version 3.4.6-1.3.6) #4 Thu Jan 15 17:40:33 CST 2015
и так:
system type : RTL8196C processor : 0 cpu model : 52481 BogoMIPS : 389.12 tlb_entries : 32 mips16 implemented : yes
и так:
RTL8196C v1.0 -- 1 15 17:38:00 CST 2015 The SDK version is: Realtek SDK v2.5-r Ethernet driver version is: - Wireless driver version is: - Fastpath source version is: - Feature support version is: -
Показать все примонтированные разделы, можно так:
rootfs on / type rootfs (rw) /dev/root on / type squashfs (ro,relatime) proc on /proc type proc (rw,relatime) ramfs on /var type ramfs (rw,relatime)
Как вы видите squashfs раздел примонтирован с параметром ro то есть только на чтение. Но, ramfs (/var) примонтирован с параметром rw то есть чтение и запись. Значит, мы можем создавать и удалять файлы в этой директории. Но после перезагрузки всё будет как раньше, а новые файлы будут удалены.
Все загрузочные скрипты находятся в директории /etc/init.d/.
rcS rcS_16M
Это место находится на разделе подключённом в режиме только чтения, поэтому вы не можете добавлять свои скрипты сюда.
На роутере установлен BusyBox. BusyBox — это набор UNIX утилит командной строки, который используется в качестве основного интерфейса во встраиваемых операционных систем. В различных версиях и сборках он содержит различное количество утилит.
Для того, чтобы получить список команд, поддерживаемых данным экземпляром BusyBox, запустите его без каких-либо аргументов или используйте опцию --list:
BusyBox v1.13.4 (2015-01-15 17:36:18 CST) multi-call binary
Copyright (C) 1998-2008 Erik Andersen, Rob Landley, Denys Vlasenko
and others. Licensed under GPLv2.
See source distribution for full notice.
Usage: busybox [function] [arguments]...
or: function [arguments]...
BusyBox is a multi-call binary that combines many common Unix
utilities into a single executable. Most people will create a
link to busybox for each function they wish to use and BusyBox
will act like whatever it was invoked as!
Currently defined functions:
arp, ash, bunzip2, bzcat, cat, cp, cut, date, echo, expr, false,
free, grep, gzip, halt, head, hostname, ifconfig, init, ip, kill,
killall, klogd, ln, ls, mkdir, mount, ping, poweroff, ps, reboot,
renice, rm, route, sh, sleep, sync, syslogd, tail, telnetd, top,
true, umount, vconfig, wc, zcip
Для того, что бы узнать о том, что делают отдельные команды, используйте опцию --help в сочетании с этой командой:
Но не все программы в прошивке являются частью BusyBox. Поэтому может потребоваться просмотреть список всех программ:
lrwxrwxrwx 1 root root 3 Jan 15 12:38 ATE_Get_BootLoaderVersion -> ate lrwxrwxrwx 1 root root 3 Jan 15 12:38 ATE_Get_FWVersion -> ate lrwxrwxrwx 1 root root 3 Jan 15 12:38 ATE_Get_FwReadyStatus -> ate lrwxrwxrwx 1 root root 3 Jan 15 12:38 ATE_Get_MacAddr_2G -> ate lrwxrwxrwx 1 root root 3 Jan 15 12:38 ATE_Get_PINCode -> ate lrwxrwxrwx 1 root root 3 Jan 15 12:38 ATE_Get_RegulationDomain -> ate lrwxrwxrwx 1 root root 3 Jan 15 12:38 ATE_Get_ResetButtonStatus -> ate lrwxrwxrwx 1 root root 3 Jan 15 12:38 ATE_Get_SWMode -> ate lrwxrwxrwx 1 root root 3 Jan 15 12:38 ATE_Get_WanLanStatus -> ate lrwxrwxrwx 1 root root 3 Jan 15 12:38 ATE_Get_WpsButtonStatus -> ate lrwxrwxrwx 1 root root 3 Jan 15 12:38 ATE_Set_AllLedOff -> ate lrwxrwxrwx 1 root root 3 Jan 15 12:38 ATE_Set_AllLedOn -> ate lrwxrwxrwx 1 root root 3 Jan 15 12:38 ATE_Set_MacAddr_2G -> ate lrwxrwxrwx 1 root root 3 Jan 15 12:38 ATE_Set_PINCode -> ate lrwxrwxrwx 1 root root 3 Jan 15 12:38 ATE_Set_RegulationDomain -> ate lrwxrwxrwx 1 root root 3 Jan 15 12:38 ATE_Set_RestoreDefault -> ate lrwxrwxrwx 1 root root 3 Jan 15 12:38 ATE_Set_StartATEMode -> ate -rwxrwxrwx 1 root root 8476 Jan 15 12:38 acltd -rwxrwxrwx 1 root root 13540 Jan 15 12:38 acs lrwxrwxrwx 1 root root 7 Jan 15 12:38 arp -> busybox lrwxrwxrwx 1 root root 7 Jan 15 12:38 ash -> busybox -rwxrwxrwx 1 root root 21876 Jan 15 12:38 ate -rwxrwxrwx 1 root root 3324 Jan 15 12:38 atewatchdog -rwxrwxrwx 1 root root 177296 Jan 15 12:38 auth -rwxrwxrwx 1 root root 22836 Jan 15 12:38 brctl lrwxrwxrwx 1 root root 7 Jan 15 12:38 bunzip2 -> busybox -rwxrwxrwx 1 root root 284072 Jan 15 12:38 busybox lrwxrwxrwx 1 root root 7 Jan 15 12:38 bzcat -> busybox lrwxrwxrwx 1 root root 7 Jan 15 12:38 cat -> busybox -rwxrwxrwx 1 root root 37 Jan 15 12:38 connect.sh lrwxrwxrwx 1 root root 7 Jan 15 12:38 cp -> busybox lrwxrwxrwx 1 root root 7 Jan 15 12:38 cut -> busybox lrwxrwxrwx 1 root root 7 Jan 15 12:38 date -> busybox -rwxrwxrwx 1 root root 5096 Jan 15 12:38 ddns_inet -rwxrwxrwx 1 root root 12772 Jan 15 12:38 detectWAN -rwxrwxrwx 1 root root 28 Jan 15 12:38 disconnect.sh -rwxrwxrwx 1 root root 44260 Jan 15 12:38 dnrd -rwxrwxrwx 1 root root 207 Jan 15 12:38 dw lrwxrwxrwx 1 root root 7 Jan 15 12:38 echo -> busybox -rwxrwxrwx 1 root root 123 Jan 15 12:38 ew lrwxrwxrwx 1 root root 7 Jan 15 12:38 expr -> busybox -rwxrwxrwx 1 root root 110292 Jan 15 12:38 ez-ipupdate lrwxrwxrwx 1 root root 7 Jan 15 12:38 false -> busybox -rwxrwxrwx 1 root root 29 Jan 15 12:38 firewall.sh -rwxrwxrwx 1 root root 84720 Jan 15 12:38 flash lrwxrwxrwx 1 root root 7 Jan 15 12:38 free -> busybox -rwxrwxrwx 1 root root 7656 Jan 15 12:38 fwupgrade -rwxrwxrwx 1 root root 98 Jan 15 12:38 getmib -rwxrwxrwx 1 root root 98 Jan 15 12:38 getmib1 lrwxrwxrwx 1 root root 7 Jan 15 12:38 grep -> busybox lrwxrwxrwx 1 root root 7 Jan 15 12:38 gzip -> busybox lrwxrwxrwx 1 root root 7 Jan 15 12:38 halt -> busybox lrwxrwxrwx 1 root root 7 Jan 15 12:38 head -> busybox lrwxrwxrwx 1 root root 7 Jan 15 12:38 hostname -> busybox -rwxrwxrwx 1 root root 481996 Jan 15 12:38 httpd -rwxrwxrwx 1 root root 7592 Jan 15 12:38 httpdcheck -rwxrwxrwx 1 root root 104 Jan 15 12:38 ib -rwxrwxrwx 1 root root 104 Jan 15 12:38 ib1 -rwxrwxrwx 1 root root 105 Jan 15 12:38 id1 -rwxrwxrwx 1 root root 105 Jan 15 12:38 idd -rwxrwxrwx 1 root root 105 Jan 15 12:38 idd1 lrwxrwxrwx 1 root root 7 Jan 15 12:38 ifconfig -> busybox -rwxrwxrwx 1 root root 25264 Jan 15 12:38 igmpproxy -rwxrwxrwx 1 root root 16852 Jan 15 12:38 infosvr lrwxrwxrwx 1 root root 7 Jan 15 12:38 init -> busybox -rwxrwxrwx 1 root root 116 Jan 15 12:38 init.sh lrwxrwxrwx 1 root root 7 Jan 15 12:38 ip -> busybox -rwxrwxrwx 1 root root 72 Jan 15 12:38 ip_qos.sh -rwxrwxrwx 1 root root 321088 Jan 15 12:38 iptables lrwxrwxrwx 1 root root 13 Jan 15 12:38 iptables-restore -> /bin/iptables -rwxrwxrwx 1 root root 111 Jan 15 12:38 irf -rwxrwxrwx 1 root root 111 Jan 15 12:38 irf1 -rwxrwxrwx 1 root root 104 Jan 15 12:38 iw -rwxrwxrwx 1 root root 104 Jan 15 12:38 iw1 -rwxrwxrwx 1 root root 37424 Jan 15 12:38 iwcontrol -rwxrwxrwx 1 root root 27076 Jan 15 12:38 iwpriv lrwxrwxrwx 1 root root 7 Jan 15 12:38 kill -> busybox lrwxrwxrwx 1 root root 7 Jan 15 12:38 killall -> busybox -rwxrwxrwx 1 root root 301 Jan 15 12:38 killsh.sh lrwxrwxrwx 1 root root 7 Jan 15 12:38 klogd -> busybox -rwxrwxrwx 1 root root 27 Jan 15 12:38 l2tp.sh -rwxrwxrwx 1 root root 113968 Jan 15 12:38 l2tpd -rwxrwxrwx 1 root root 64352 Jan 15 12:38 lld2d lrwxrwxrwx 1 root root 7 Jan 15 12:38 ln -> busybox lrwxrwxrwx 1 root root 7 Jan 15 12:38 ls -> busybox -rwxrwxrwx 1 root root 97348 Jan 15 12:38 miniigd lrwxrwxrwx 1 root root 7 Jan 15 12:38 mkdir -> busybox -rwxrwxrwx 1 root root 182 Jan 15 12:38 mmd_cmdr -rwxrwxrwx 1 root root 196 Jan 15 12:38 mmd_cmdw lrwxrwxrwx 1 root root 7 Jan 15 12:38 mount -> busybox -rwxrwxrwx 1 root root 589 Jan 15 12:38 mp.sh -rwxrwxrwx 1 root root 31004 Jan 15 12:38 networkmap -rwxrwxrwx 1 root root 9156 Jan 15 12:38 notify_service -rwxrwxrwx 1 root root 6912 Jan 15 12:38 ntp_inet -rwxrwxrwx 1 root root 25084 Jan 15 12:38 ntpclient -rwxrwxrwx 1 root root 115 Jan 15 12:38 ob -rwxrwxrwx 1 root root 115 Jan 15 12:38 ob1 -rwxrwxrwx 1 root root 116 Jan 15 12:38 od -rwxrwxrwx 1 root root 116 Jan 15 12:38 od1 -rwxrwxrwx 1 root root 122 Jan 15 12:38 orf -rwxrwxrwx 1 root root 122 Jan 15 12:38 orf1 -rwxrwxrwx 1 root root 115 Jan 15 12:38 ow -rwxrwxrwx 1 root root 115 Jan 15 12:38 ow1 -rwxrwxrwx 1 root root 184 Jan 15 12:38 phyr -rwxrwxrwx 1 root root 151 Jan 15 12:38 phyw lrwxrwxrwx 1 root root 7 Jan 15 12:38 ping -> busybox lrwxrwxrwx 1 root root 7 Jan 15 12:38 poweroff -> busybox -rwxrwxrwx 1 root root 6520 Jan 15 12:38 ppp_inet -rwxrwxrwx 1 root root 276552 Jan 15 12:38 pppd -rwxrwxrwx 1 root root 30 Jan 15 12:38 pppoe.sh -rwxrwxrwx 1 root root 49 Jan 15 12:38 pppoe_conn_patch.sh -rwxrwxrwx 1 root root 87 Jan 15 12:38 pppoe_disc_patch.sh -rwxrwxrwx 1 root root 63784 Jan 15 12:38 pptp -rwxrwxrwx 1 root root 29 Jan 15 12:38 pptp.sh lrwxrwxrwx 1 root root 7 Jan 15 12:38 ps -> busybox lrwxrwxrwx 1 root root 7 Jan 15 12:38 reboot -> busybox -rwxrwxrwx 1 root root 11699 Jan 15 12:38 reload lrwxrwxrwx 1 root root 7 Jan 15 12:38 renice -> busybox lrwxrwxrwx 1 root root 7 Jan 15 12:38 rm -> busybox lrwxrwxrwx 1 root root 7 Jan 15 12:38 route -> busybox -rwxrwxrwx 1 root root 53887 Jan 15 12:38 routed -rwxrwxrwx 1 root root 48 Jan 15 12:38 rssi -rwxrwxrwx 1 root root 48 Jan 15 12:38 rssi1 -rwxrwxrwx 1 root root 108 Jan 15 12:38 setmib -rwxrwxrwx 1 root root 108 Jan 15 12:38 setmib1 lrwxrwxrwx 1 root root 7 Jan 15 12:38 sh -> busybox lrwxrwxrwx 1 root root 7 Jan 15 12:38 sleep -> busybox -rwxrwxrwx 1 root root 2406 Jan 15 12:38 snmpd.sh -rwxrwxrwx 1 root root 8492 Jan 15 12:38 start_mac_clone -rwxrwxrwx 1 root root 656 Jan 15 12:38 startup.sh lrwxrwxrwx 1 root root 7 Jan 15 12:38 sync -> busybox -rwxrwxrwx 1 root root 198664 Jan 15 12:38 sysconf lrwxrwxrwx 1 root root 7 Jan 15 12:38 syslogd -> busybox lrwxrwxrwx 1 root root 7 Jan 15 12:38 tail -> busybox -rwxrwxrwx 1 root root 259828 Jan 15 12:38 tc -rwxrwxrwx 1 root root 7592 Jan 15 12:38 tcpcheck lrwxrwxrwx 1 root root 7 Jan 15 12:38 telnetd -> busybox lrwxrwxrwx 1 root root 7 Jan 15 12:38 top -> busybox lrwxrwxrwx 1 root root 7 Jan 15 12:38 true -> busybox lrwxrwxrwx 1 root root 6 Jan 15 12:38 udhcpc -> udhcpd -rwxrwxrwx 1 root root 43595 Jan 15 12:38 udhcpd -rwxrwxrwx 1 root root 62408 Jan 15 12:38 udpxy lrwxrwxrwx 1 root root 7 Jan 15 12:38 umount -> busybox lrwxrwxrwx 1 root root 7 Jan 15 12:38 vconfig -> busybox -rwxrwxrwx 1 root root 38144 Jan 15 12:38 wanduck lrwxrwxrwx 1 root root 7 Jan 15 12:38 wc -> busybox -rwxrwxrwx 1 root root 31 Jan 15 12:38 wlanapp.sh -rwxrwxrwx 1 root root 281752 Jan 15 12:38 wscd lrwxrwxrwx 1 root root 7 Jan 15 12:38 zcip -> busybox -rwxrwxrwx 1 root root 100 Jan 15 12:38 zcip.sh
Если в списке вы видите что-то похожее на […] -> busybox то эта программа является частью BusyBox.
Если нет нужной вам программы, то вы можете скачать её из интернета (или создать его путем кросс-компиляции) и положить в временный каталог (/tmp/). Также вы можете скачать полную версию BusyBox с официального сайта (http://www.busybox.net) и поместить его в временный каталог (/tmp/). Но, как я писал выше, после перезагрузки всё будет как раньше и новые файлы будут удалены.
К примеру, в моём роутере, встроенный BusyBox (v1.13.4) не содержит редактор vi или nano.
NVRAM
А теперь про особенности о которых Я писал выше. Все настройки роутера (настройки изменяемые через веб-интерфейс, пользовательские настройки, загрузочные скрипты) хранятся в энергонезависимый памяти — NVRAM (Non Volatile Random Access Memory). Существует специальная команда для работы с этой памятью — flash и она уже установлена в оригинальную прошивку.
Его можно запустить без аргументов для того, чтобы увидеть все опции:
Usage: flash cmd
option:
cmd:
default -- write all flash parameters from hard code.
get [wlan interface-index] mib-name -- get a specific mib from flash
memory.
set [wlan interface-index] mib-name mib-value -- set a specific mib into
flash memory.
all -- dump all flash parameters.
gethw hw-mib-name -- get a specific mib from flash
memory.
sethw hw-mib-name mib-value -- set a specific mib into
flash memory.
allhw -- dump all hw flash parameters.
reset -- reset current setting to default.
set_mib -- get mib from flash and set to wlan interface.
Как вы можете видеть есть несколько опций. Аббревиатура hw означает — оборудование (железо).
Все настройки хранятся в переменных.
Показать все переменные:
DEF_IP_ADDR=192.168.1.1 DEF_SUBNET_MASK=255.255.255.0 DEF_DEFAULT_GATEWAY=0.0.0.0 DEF_DHCP=2 DEF_DHCP_CLIENT_START=192.168.1.2 DEF_DHCP_CLIENT_END=192.168.1.254 DEF_DHCP_LEASE_TIME=0 DEF_DHCP_LEASE=86400 DEF_ELAN_MAC_ADDR=000000000000 DEF_DNS1=0.0.0.0 DEF_DNS2=0.0.0.0 DEF_DNS3=0.0.0.0 DEF_STP_ENABLED=0 DEF_DEVICE_NAME="RTL8196c" ....
И многие другие переменные.
Примечание: Все переменные начинающиеся с префикса
DEF_имеют значение по умолчанию (исходная конфигурация). Она включается при нажатии кнопкиResetна корпусе роутера или из веб-интерфейса роутера или с помощью командыflashв терминале.
Примечание: Не все из перечисленных переменных работают.Такие переменные как
SAMBA_ENABLED=0не работают, из-за того, что Samba не установлен.
Для того, чтобы найти переменные с словом NAME, используйте команду flash совместно с grep:
DEF_DEVICE_NAME="RTL8196c" DEF_DOMAIN_NAME="ASUS" DEF_SUPER_NAME="admin" DEF_USER_NAME="" DEF_PPP_USER_NAME="" DEF_PPTP_USER_NAME="" DEF_L2TP_USER_NAME="" DEF_DDNS_DOMAIN_NAME="" DEF_DDNS_SUGGEST_NAME="" DEF_HOST_NAME="" DEF_PPP_SERVICE_NAME="" DEF_PPTPD_USERNAME="" DEVICE_NAME="RT-N12LX" DOMAIN_NAME="asus.loc" SUPER_NAME="admin" USER_NAME="" PPP_USER_NAME="*****" PPTP_USER_NAME="" L2TP_USER_NAME="" DDNS_DOMAIN_NAME="" DDNS_SUGGEST_NAME="" HOST_NAME="" PPP_SERVICE_NAME="" PPTPD_USERNAME="" Aborted
Примечание: Имена всех переменных записываются в верхнем регистре.
Показать значение определенной переменной (например, имя администратора):
SUPER_NAME="admin"
Установить новое значение переменной (например, имя администратора):
flash set SUPER_NAME superadmin
Теперь у вас есть новое имя администратора (логин), а это повышает безопасность.
Но для того, что бы изменения вступили в силу необходимо перезагрузить роутер:
Если необходимо вернуть все заводские параметры (сброс к изначальным настройкам):
P.S. Если вы не нашли в этой статье нужную вам информацию, то может быть вы сможете найти её в комментариях ниже. В английской версии статьи комментариев больше.
Если эта статья помогла вам, пожалуйста, оставьте комментарий
Спасибо за прочтение!
BusyBox – это программный пакет, предназначенный для реализации утилит командной строки в компактном и оптимизированном виде. Он широко используется на роутерах и других встроенных системах, где ограниченное пространство и процессорные ресурсы требуют сокращения объема и упрощения командных утилит.
BusyBox объединяет множество стандартных компонентов командной строки, таких как cat, cp, grep, ls и многое другое, в единую исполняемую программу. Это позволяет значительно сократить размер файловой системы и упростить управление и обновление утилит на роутерах и других устройствах.
Одна из особенностей BusyBox – его ядро написано на языке C и использует очень мало ресурсов, однако, это не мешает ему предоставить полноценный набор команд и функций. Благодаря своей оптимизации, BusyBox работает даже на устройствах с ограниченными процессорными мощностями.
BusyBox позволяет значительно упростить и ускорить процесс настройки и администрирования роутера. Строка команд BusyBox выполняет роль интерфейса между пользователем и операционной системой роутера. Он предоставляет пользователю доступ к различным системным командам, которые позволяют управлять настройками и функциями роутера.
BusyBox также используется во многих других встроенных системах, таких как медиаплееры, телевизоры, смартфоны и прочее. Его простота и компактность делают его идеальным решением для таких устройств, где требуется минимальный размер и максимальная эффективность ресурсов.
В целом, BusyBox является важным компонентом встроенных систем, который позволяет оптимизировать использование ресурсов и упростить процесс настройки и администрирования роутера и других устройств. Его функциональность и удобство использования делают его популярным выбором для разработчиков и пользователей встроенных систем.
Содержание
- BusyBox на роутере: особенности и функции
- Что представляет собой BusyBox?
- Основные особенности BusyBox
BusyBox на роутере: особенности и функции
Основные функции BusyBox на роутере включают:
- Минимальный размер: BusyBox занимает меньше места на диске и памяти роутера, что особенно важно при работе с ограниченными ресурсами.
- Компактность: Все его компоненты объединяются в один исполняемый файл, что облегчает установку и обновление.
- Многофункциональность: BusyBox включает большое количество утилит и команд, таких как ls, cat, echo, grep, mv, cp и многие другие. Они позволяют выполнять различные операции с файлами, управлять процессами, изменять настройки сети и другие административные задачи.
BusyBox стал неотъемлемой частью многих роутеров и других встроенных устройств, так как позволяет создавать удобные команды, упрощая работу с операционной системой и расширяя их функциональность.
Если вы являетесь владельцем роутера, можно попробовать использовать BusyBox для настройки и управления вашим устройством, чтобы получить больше возможностей и гибкости в его использовании.
Что представляет собой BusyBox?
BusyBox был создан для работы на ограниченных устройствах, таких как роутеры, маршрутизаторы и другие встроенные системы, которые имеют ограниченные ресурсы по памяти и процессору. Он объединяет множество утилит в одну исполняемую программу, что позволяет значительно сэкономить место на диске и повысить эффективность работы.
BusyBox включает в себя множество утилит, таких как командный интерпретатор, файловый менеджер, утилиты для работы с сетью, архиваторы и многое другое. Это делает его универсальным инструментом для настройки и управления встроенными системами.
BusyBox является открытым программным обеспечением, распространяемым на условиях лицензии GNU General Public License (GPL). Он широко используется во множестве устройств и операционных систем, и его исходный код доступен для свободного использования и изменения.
Основные особенности BusyBox
Вот несколько основных особенностей BusyBox:
- Маленький размер: BusyBox занимает небольшой объем памяти и файлового пространства на диске. Благодаря этому он идеально подходит для встраиваемых систем с ограниченными ресурсами, такими как роутеры.
- Множество команд: В состав BusyBox входит большое количество утилит командной строки, что позволяет выполнять различные задачи, такие как управление файлами, манипулирование текстом, настройка сети и многое другое.
- Совместимость: BusyBox совместим с POSIX-стандартом, что позволяет ему работать на различных платформах и операционных системах, включая Linux.
- Гибкость и настраиваемость: BusyBox можно настроить и скомпилировать таким образом, чтобы включить или исключить определенные команды, в зависимости от конкретных потребностей системы.
- Открытая лицензия: BusyBox распространяется под лицензией GNU General Public License (GPL), что означает, что он является открытым исходным кодом и доступен для свободного использования и модификации.
BusyBox является важным компонентом во многих встраиваемых системах, включая роутеры, и обеспечивает удобство использования и эффективность в управлении системой через командную строку.
Время на прочтение
5 мин
Количество просмотров 44K

Всем привет, в свете последних новостей от РосКомНадзора решил я глянуть, как дела с блокировками у моего провайдера. Оказалось, что гугловский DNS не спасает, а блокировка работает путем выделения HTTP запроса на запрещенный сайт и последующего дропания пакетов найденной TCP сессии. Однако после небольшого ковыряния оказалось, что для обхода достаточно одного busybox’а. Кому интересно — велком под кат.
Сразу оговорюсь, что реализация блокировки зависит от провайдера и мой способ может у вас не сработать. Итак, рассматривать будем на примере всем известного сайта rutracker.ogr (домен и IP адрес в посте изменен во избежание).
Начал я с простого запроса, чтобы посмотреть, как в целом реагирует провайдер.
Запрос главной страницы
wget -O/dev/null "rutracker.ogr" --2016-02-10 01:21:18-- http://rutracker.ogr/ Распознаётся rutracker.ogr (rutracker.ogr)… 195.82.147.214 Подключение к rutracker.ogr (rutracker.ogr)|195.82.147.214|:80... соединение установлено. HTTP-запрос отправлен. Ожидание ответа...
Дамп пакетов
01:25:10.736021 IP 192.168.5.2.53724 > 195.82.147.214.80: Flags [S], seq 778021515, win 29200, options [mss 1460,sackOK,TS val 40091571 ecr 0,nop,wscale 7], length 0 01:25:10.771529 IP 195.82.147.214.80 > 192.168.5.2.53724: Flags [S.], seq 866160985, ack 778021516, win 14600, options [mss 1400], length 0 01:25:10.771562 IP 192.168.5.2.53724 > 195.82.147.214.80: Flags [.], ack 1, win 29200, length 0 01:25:10.771701 IP 192.168.5.2.53724 > 195.82.147.214.80: Flags [P.], seq 1:141, ack 1, win 29200, length 140: HTTP: GET / HTTP/1.1 01:25:11.129078 IP 192.168.5.2.53724 > 195.82.147.214.80: Flags [P.], seq 1:141, ack 1, win 29200, length 140: HTTP: GET / HTTP/1.1 01:25:11.849176 IP 192.168.5.2.53724 > 195.82.147.214.80: Flags [P.], seq 1:141, ack 1, win 29200, length 140: HTTP: GET / HTTP/1.1 01:25:13.292495 IP 192.168.5.2.53724 > 195.82.147.214.80: Flags [P.], seq 1:141, ack 1, win 29200, length 140: HTTP: GET / HTTP/1.1
Клиент успешно подключается, оправляет запрос и собственно все. Куча TCP перепосылок до истечения таймаута. DPI распознал сессию и дропнул ее как запрещенную. А дальше меня зачем-то дернуло попробовать то же самое, но через telnet.
Запрос страницы через telnet
telnet rutracker.ogr 80 Trying 195.82.147.214... Connected to rutracker.ogr. Escape character is '^]'. GET / HTTP/1.1 User-Agent: Wget/1.16.3 (linux-gnu) Accept: */* Accept-Encoding: identity Host: rutracker.ogr Connection: Keep-Alive HTTP/1.1 301 Moved Permanently Server: nginx Date: Tue, 09 Feb 2016 22:29:50 GMT Content-Type: text/html Content-Length: 178 Location: http://rutracker.ogr/forum/index.php Connection: keep-alive <html> <head><title>301 Moved Permanently</title></head> <body bgcolor="white"> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
Дамп пакетов при запросе через telnet
01:33:15.354300 IP 192.168.5.2.53782 > 195.82.147.214.80: Flags [S], seq 4112340002, win 29200, options [mss 1460,sackOK,TS val 40236956 ecr 0,nop,wscale 7], length 0 01:33:15.389921 IP 195.82.147.214.80 > 192.168.5.2.53782: Flags [S.], seq 3472440534, ack 4112340003, win 14600, options [mss 1400], length 0 01:33:15.389967 IP 192.168.5.2.53782 > 195.82.147.214.80: Flags [.], ack 1, win 29200, length 0 01:33:16.226472 IP 192.168.5.2.53782 > 195.82.147.214.80: Flags [P.], seq 1:17, ack 1, win 29200, length 16: HTTP: GET / HTTP/1.1 01:33:16.263181 IP 195.82.147.214.80 > 192.168.5.2.53782: Flags [.], ack 17, win 14600, length 0 01:33:16.263214 IP 192.168.5.2.53782 > 195.82.147.214.80: Flags [P.], seq 17:139, ack 1, win 29200, length 122: HTTP 01:33:16.298317 IP 195.82.147.214.80 > 192.168.5.2.53782: Flags [.], ack 139, win 14600, length 0 01:33:16.789180 IP 192.168.5.2.53782 > 195.82.147.214.80: Flags [P.], seq 139:141, ack 1, win 29200, length 2: HTTP 01:33:16.827756 IP 195.82.147.214.80 > 192.168.5.2.53782: Flags [.], ack 141, win 14600, length 0 01:33:16.828043 IP 195.82.147.214.80 > 192.168.5.2.53782: Flags [P.], seq 1:383, ack 141, win 14600, length 382: HTTP: HTTP/1.1 301 Moved Permanently 01:33:16.828067 IP 192.168.5.2.53782 > 195.82.147.214.80: Flags [.], ack 383, win 30016, length 0 01:33:20.376119 IP 192.168.5.2.53782 > 195.82.147.214.80: Flags [F.], seq 141, ack 383, win 30016, length 0 01:33:20.412142 IP 195.82.147.214.80 > 192.168.5.2.53782: Flags [F.], seq 383, ack 142, win 14600, length 0 01:33:20.412177 IP 192.168.5.2.53782 > 195.82.147.214.80: Flags [.], ack 384, win 30016, length 0 01:33:30.299143 IP 192.168.5.2.53780 > 195.82.147.214.80: Flags [FP.], seq 1515330593:1515330733, ack 3791059975, win 29200, length 140: HTTP: GET / HTTP/1.1
Собственно в этот момент стало понятно, что не так страшен DPI, как его малюют. Если присмотреться к дампам, то видно, что telnet отправляет первую строку запроса отдельным пакетом. То есть DPI анализирует не TCP поток, а первый пакет с данными от клиента к серверу и пытается из пути и поля Host собрать Url, чтобы пробить его по базе. Если же первую строку запроса с путем и строку с полем Host растащить по разным пакетам, то DPI не может корректно обработать такую сессию и пропускает ее.
Дело оставалось за малым. Нужно было сделать некий прокси, который бы разбивал заголовок первого HTTP запроса в TCP сессии (помним про Connection: Keep-Alive) на два пакета, а остальное бы просто пересылал насквозь. Также хотелось, чтобы этот прокси работал на роутере под OpenWrt, дабы обеспечить всю домашнюю сеть. Сделать такой прокси можно разными способами, я выбрал самый ленивый, быстрый и наколенный, так как цель была сделать именно proof of concept, а не коробочное решение.
В качестве прокси у меня выступает shell скрипт, который запускается из-под tcpsvd (по умолчанию в OpenWrt’шном busybox’е апплет tcpsvd отсутствует, поэтому его надо пересобрать, используя стандартный buildroot). На всякий случай напомню, что tcpsvd — это такая штука, которая слушает порт и при подключении клиента запускает дочерний процесс, перенаправляя его ввод/вывод в сокет.
Получился вот такой скрипт (ногами просьба не бить, это всего лишь proof of concept)
#!/bin/sh
# костыль для склейки строк через символы перевода строки
appendLine()
{
if [[ ! -z "$1" ]]
then
echo -ne "$1\r\n$2"
else
echo -ne "$2"
fi
}
header1=""
header2=""
host=""
while [[ true ]]
do
# читаем строку
read -r line
# обрезаем оставшийся в строке 0x0D
line=`echo "$line" | tr -d "\r"`
# конец заголовка
if [[ -z "$line" ]]
then
break
fi
# Все, что до Host: попадет в header1, остальное - в header2
if [[ -z "$host" ]]
then
if [[ `echo "$line" | grep -c "Host:"` -eq "1" ]]
then
host=`echo "$line" | sed -re 's/^Host: (.*)\r?$/\1/'`
header2=`appendLine "$header2" "$line"`
else
header1=`appendLine "$header1" "$line"`
fi
else
header2=`appendLine "$header2" "$line"`
fi
done
{
# первая половина заголовка
echo -ne "$header1\r\n"
# ждем секунду, чтобы netcat отправил пакет, если кто подскажет, как сделать это иначе - скажу спасибо
sleep 1
# вторая половина заголовка
echo -ne "$header2\r\n\r\n"
# заголовок ушел, DPI пропустил сессию, остальное - просто прокидываем
cat 2>/dev/null
} | nc "$host" 80
На всякий случай уточню, что секунду мы ждем только в начале TCP сессии, а так как обычно браузеры сессию не отключают, а продолжают слать в ней запросы, явных тормозов быть не должно.
Запускается этот костыльный прокси так:
tcpsvd 0.0.0.0 3128 ./proxy.sh
Осталось только перенаправить трафик с браузера на прокси любым способом. Можно это сделать например, как тут, а можно сгенерировать файл автоопределения прокси из списка запрещенных сайтов. Второй вариант проще, лень опять победила и получилось вот такое:
{
echo -e "function FindProxyForURL(url, host)\n{\n\tif ("
wget "http://api.antizapret.info/group.php?data=domain" -O- | sed -re 's/^(.*)$/localHostOrDomainIs(host,"\1") || /'
echo -e "false)\n{ return \"PROXY 192.168.5.1:3128\"; }\nreturn \"DIRECT\";\n}";
} > ~/antidpi.pac
После подсовывания этого файла в настройки прокси запрещенные сайты начали открываться без вопросов.
Буду рад, если кто-нибудь менее ленивый сделает прокси по-нормальному или, если я изобрел велосипед, укажет на готовое стандартное решение.
На этом все, спасибо за внимание.