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
После подсовывания этого файла в настройки прокси запрещенные сайты начали открываться без вопросов.
Буду рад, если кто-нибудь менее ленивый сделает прокси по-нормальному или, если я изобрел велосипед, укажет на готовое стандартное решение.
На этом все, спасибо за внимание.