Что такое busybox на роутере

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

Приведенный список может различаться в зависимости от модели и прошивки вашего роутера.

Содержание

  1. Основные команды busybox в роутере
  2. Список и описание команд
  3. Примеры использования команд

Основные команды 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.

thumb

Как получить полный контроль, над роутером 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. Если вы не нашли в этой статье нужную вам информацию, то может быть вы сможете найти её в комментариях ниже. В английской версии статьи комментариев больше.

Если эта статья помогла вам, пожалуйста, оставьте комментарий :smiley:

Спасибо за прочтение!

BusyBox – это программный пакет, предназначенный для реализации утилит командной строки в компактном и оптимизированном виде. Он широко используется на роутерах и других встроенных системах, где ограниченное пространство и процессорные ресурсы требуют сокращения объема и упрощения командных утилит.

BusyBox объединяет множество стандартных компонентов командной строки, таких как cat, cp, grep, ls и многое другое, в единую исполняемую программу. Это позволяет значительно сократить размер файловой системы и упростить управление и обновление утилит на роутерах и других устройствах.

Одна из особенностей BusyBox – его ядро написано на языке C и использует очень мало ресурсов, однако, это не мешает ему предоставить полноценный набор команд и функций. Благодаря своей оптимизации, BusyBox работает даже на устройствах с ограниченными процессорными мощностями.

BusyBox позволяет значительно упростить и ускорить процесс настройки и администрирования роутера. Строка команд BusyBox выполняет роль интерфейса между пользователем и операционной системой роутера. Он предоставляет пользователю доступ к различным системным командам, которые позволяют управлять настройками и функциями роутера.

BusyBox также используется во многих других встроенных системах, таких как медиаплееры, телевизоры, смартфоны и прочее. Его простота и компактность делают его идеальным решением для таких устройств, где требуется минимальный размер и максимальная эффективность ресурсов.

В целом, BusyBox является важным компонентом встроенных систем, который позволяет оптимизировать использование ресурсов и упростить процесс настройки и администрирования роутера и других устройств. Его функциональность и удобство использования делают его популярным выбором для разработчиков и пользователей встроенных систем.

Содержание

  1. BusyBox на роутере: особенности и функции
  2. Что представляет собой BusyBox?
  3. Основные особенности BusyBox

BusyBox на роутере: особенности и функции

Основные функции BusyBox на роутере включают:

  1. Минимальный размер: BusyBox занимает меньше места на диске и памяти роутера, что особенно важно при работе с ограниченными ресурсами.
  2. Компактность: Все его компоненты объединяются в один исполняемый файл, что облегчает установку и обновление.
  3. Многофункциональность: 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

image
Всем привет, в свете последних новостей от РосКомНадзора решил я глянуть, как дела с блокировками у моего провайдера. Оказалось, что гугловский 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

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

Другие наши интересноые статьи:

  • Что такое dbm на роутере
  • Что такое bridging при настройке роутера
  • Что такое daisy chain в роутере
  • Что такое bridge для роутера
  • Что такое cwmp в роутере tp link

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии