Apple TimeCapsule/AirPort Extreme. Root доступ и побег из привязанного региона

  • Tutorial
Наверняка многие владельцы сетевых устройств Apple, которые читают эту статью, таких как TimeCapsule или Airport Extreme, рано или поздно задумывались почему у купленных в России устройств нет поддержки beamforming и максимальная ширина канала 40МГц? И как следствие максимальная скорость приема и передачи данных – 600 Мбит/с (вместо заявленных 1300 Мбит/с).

Если кто не знал или забыл, устройства выглядят так:



На сайте apple дан ответ: «AirPort Extreme разработан на основе предварительных технических требований к стандарту IEEE 802.11ac. Поддержка функций 802.11ac зависит от законодательных требований, существующих в конкретной стране; каналы с шириной спектра 80 МГц и технология формирования луча недоступны в Российской Федерации, на Украине, в Кувейте, Беларуси, Морокко, Азербайджане, Казахстане и Египте. Максимальная теоретическая скорость передачи данных составляет 600 Мбит/с; фактическая скорость будет ниже.»

Поэтому сегодня я расскажу Вам как сбежать из региона не меняя при этом само устройство.

Для этого нам потребуется python 2.7 (на mac OS X он уже предустановлен), утилита AirPyrt и 5 минут свободного времени.

Скачаем и установим AirPyrt.

Через терминал с правами root:

python setup.py install

Утилита AirPyrt использует протокол ACP для связи с устройствами Apple AirPort. Тот самый протокол, по которому iphone или mac увидит не настроенное устройство через утилиту AirPort.

Далее включим ssh на нашем устройстве:

python -m acp -t {ipv4-address} -p {password} --setprop dbug 0x3000
python -m acp -t {ipv4-address} -p {password} --reboot

После этого мы можем получить root доступ до устройства по ssh и изменить на нем абсолютно всё. Кстати роутер основан на NetBSD.

Подключаемся по ssh:

ssh root@{ipv4-address}

Далее нам необходимо будет заменить всего две вещи: код страны и SKU.

Для замены страны на USA:

acp -q syRe=0x00000000
acp static apple-sku=FCC

Список стран и коды(необходимо перевести в HEX):
«syRe.0» = «United States»;
«syRe.1» = «Canada»;
«syRe.2» = «Mexico»;
«syRe.3» = «Colombia»;
«syRe.4» = «Puerto Rico»;
«syRe.5» = «Brazil»;
«syRe.6» = «Chile»;
«syRe.7» = «Japan»;
«syRe.8» = «Austria»;
«syRe.9» = «Belgium»;
«syRe.10» = «Cyprus»;
«syRe.11» = «Czech Republic»;
«syRe.12» = «Denmark»;
«syRe.13» = «Estonia»;
«syRe.14» = «France»;
«syRe.15» = «Finland»;
«syRe.16» = «Germany»;
«syRe.17» = «Greece»;
«syRe.18» = «Hungary»;
«syRe.19» = «Iceland»;
«syRe.20» = «Italy»;
«syRe.21» = «Ireland»;
«syRe.22» = «Latvia»;
«syRe.23» = «Liechtenstein»;
«syRe.24» = «Lithuania»;
«syRe.25» = «Luxembourg»;
«syRe.26» = «Malta»;
«syRe.27» = «Netherlands»;
«syRe.28» = «Norway»;
«syRe.29» = «Poland»;
«syRe.30» = «Portugal»;
«syRe.31» = «Slovak Republic»;
«syRe.32» = «Slovenia»;
«syRe.33» = «Spain»;
«syRe.34» = «Sweden»;
«syRe.35» = «Switzerland»;
«syRe.36» = «United Kingdom»;
«syRe.37» = «Australia»;
«syRe.38» = «Hong Kong S.A.R., China»;
«syRe.39» = «New Zealand»;
«syRe.40» = «Singapore»;
«syRe.41» = «Philippines»;
«syRe.42» = «China»;
«syRe.43» = «Malaysia»;
«syRe.44» = «Taiwan»;
«syRe.45» = «South Korea»;
«syRe.46» = «Thailand»;
«syRe.47» = «Argentina»;
«syRe.48» = «Venezuela»;
«syRe.49» = «Russia»;
«syRe.50» = «United States»;
«syRe.51» = «Canada»;
«syRe.52» = «Bulgaria»;
«syRe.53» = «Romania»;
«syRe.54» = «India»;
«syRe.55» = «Vietnam»;
«syRe.56» = «Sri Lanka»;
«syRe.57» = «Brunei»;
«syRe.58» = «Pakistan»;
«syRe.59» = «Nepal»;
«syRe.60» = «Bangladesh»;
«syRe.61» = «Peru»;
«syRe.62» = «Afghanistan»;
«syRe.63» = «Albania»;
«syRe.64» = «Algeria»;
«syRe.65» = «American Samoa»;
«syRe.66» = «Andorra»;
«syRe.67» = «Angola»;
«syRe.68» = «Anguilla»;
«syRe.69» = «Antarctica»;
«syRe.70» = «Antigua And Barbuda»;
«syRe.71» = «Armenia»;
«syRe.72» = «Aruba»;
«syRe.73» = «Azerbaijan»;
«syRe.74» = «Bahamas»;
«syRe.75» = «Bahrain»;
«syRe.76» = «Barbados»;
«syRe.77» = «Belarus»;
«syRe.78» = «Belize»;
«syRe.79» = «Benin»;
«syRe.80» = «Bermuda»;
«syRe.81» = «Bhutan»;
«syRe.82» = «Bolivia»;
«syRe.83» = «Bosnia Herzegovina»;
«syRe.84» = «Botswana»;
«syRe.85» = «Bouvet Island»;
«syRe.86» = «British Indian Ocean Territory»;
«syRe.87» = «Burkina Faso»;
«syRe.88» = «Burundi»;
«syRe.89» = «Cambodia»;
«syRe.90» = «Cameroon»;
«syRe.91» = «Cape Verde»;
«syRe.92» = «Cayman Islands»;
«syRe.93» = «Central African Republic»;
«syRe.94» = «Chad»;
«syRe.95» = «Christmas Island»;
«syRe.96» = «Cocos Islands»;
«syRe.97» = «Comoros»;
«syRe.98» = «Congo»;
«syRe.99» = «Cook Islands»;
«syRe.100» = «Costa Rica»;
«syRe.101» = «Ivory Coast»;
«syRe.102» = «Croatia»;
«syRe.103» = «Djibouti»;
«syRe.104» = «Dominica»;
«syRe.105» = «Dominican Republic»;
«syRe.106» = «East Timor»;
«syRe.107» = «Ecuador»;
«syRe.108» = «Egypt»;
«syRe.109» = «El Salvador»;
«syRe.110» = «Equatorial Guinea»;
«syRe.111» = «Eritrea»;
«syRe.112» = «Ethiopia»;
«syRe.113» = «Falkland Islands»; /* A.K.A. (Malvinas) */
«syRe.114» = «Faeroe Islands»;
«syRe.115» = «Fiji»;
«syRe.116» = «French Guiana»;
«syRe.117» = «French Polynesia»;
«syRe.118» = «French Southern Territories»;
«syRe.119» = «Gabon»;
«syRe.120» = «Gambia»;
«syRe.121» = «Georgia»;
«syRe.122» = «Ghana»;
«syRe.123» = «Gibraltar»;
«syRe.124» = «Greenland»;
«syRe.125» = «Grenada»;
«syRe.126» = «Guadeloupe»;
«syRe.127» = «Guam»;
«syRe.128» = «Guatemala»;
«syRe.129» = «Guinea»;
«syRe.130» = «Guinea Bissau»;
«syRe.131» = «Guyana»;
«syRe.132» = «Haiti»;
«syRe.133» = «Honduras»;
«syRe.134» = «Indonesia»;
«syRe.135» = «Iran»;
«syRe.136» = «Iraq»;
«syRe.137» = «Israel»;
«syRe.138» = «Jamaica»;
«syRe.139» = «Jordan»;
«syRe.140» = «Kazakhstan»;
«syRe.141» = «Kenya»;
«syRe.142» = «North Korea»;
«syRe.143» = «Kuwait»;
«syRe.144» = «Lebanon»;
«syRe.145» = «Libya»;
«syRe.146» = «Macau»;
«syRe.147» = «Macedonia»;
«syRe.148» = «Monaco»;
«syRe.149» = «Morocco»;
«syRe.150» = «Nicaragua»;
«syRe.151» = «Oman»;
«syRe.152» = «Qatar»;
«syRe.153» = «Saudi Arabia»;
«syRe.154» = «South Africa»;
«syRe.155» = «Syria»;
«syRe.156» = «Trinidad And Tobago»;
«syRe.157» = «Tunisia»;
«syRe.158» = «Turkey»;
«syRe.159» = «United Arab Emirates»;
«syRe.160» = «Ukraine»;
«syRe.161» = «Uruguay»;
«syRe.162» = «Uzbekistan»;
«syRe.163» = «Yemen»;
«syRe.164» = «Zimbabwe»;

Список SKU:
FCC
JAPAN
ETSI
APAC
ROW
FCC-DFS
KOREA
RUSSIA
SAM

После этого отключаемся от ssh и перезагружаем устройство:

python -m acp -t {ipv4-address} -p {password} --reboot

Для отключения ssh:

python -m acp -t {ipv4-address} -p {password} --setprop dbug 0x0000
python -m acp -t {ipv4-address} -p {password} --reboot

После «переезда» в США имеем:



UPDATE:
Как верно заметил smarty999, на некоторых прошивках для отключения ssh необходимо в сессии ssh выполнить
acp remove dbug
reboot
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 43

    0
    А почему в Keenetic есть 80Mhz и Beamforming? Они не соблюдают регуляторные требования? Или из-за того, что
    AirPort Extreme разработан на основе предварительных технических требований к стандарту IEEE 802.11ac
      +5
      Я так понимаю, что на момент выхода железки, с регулятором не договорились по поводу ширины канала на 5ГГц. А уже после никто переделывать не стал.
      Сейчас в постановлениях ГРЧЦ по частотному диапазону 5 Ггц указано, что ширина 80 и 160 Мгц доступна в России.
        0
        Спасибо большое. Интересно, чем им Beamforming не понравился, или он не работает на 40Mhz? Я в радиотехнике полный дилетант, но если для работы Beamforming надо две антенны, каждая из которых дает полосу в 40Mhz, то все понятно.
          +2
          Нашел специально для Вас в Консультанте изменения в приказе Минсвязи от 22.04.2015 N 129.
          На момент выхода первого роутера Apple с IEEE 802.11ac в 2013 году не был полностью описан стандарт в нашем законодательстве. И как следствие, не могли использовать технологию beamforming, т.к. это описано как «дополнительные технологии».
            0
            Схожая ситуация (когда прошивка устройства отключает некоторые фичи, если на момент выпуска прошивки они не разрешены в конкретном регионе) сейчас с беспроводными адаптерами Inrel, отчего у некоторых бомбит.
      0

      ещё бы на эти железки openwrt какой-нибудь нарезать, а то мощность большая, но использовать например для роутинга/опенвпн не представляется возможным

        +1
        После того, как получен root до устройства, можно установить и openvpn и всё, что угодно
        +1
        AirPyrt зависит от заброшенного и дырявого pycrypto.
          0

          Тут конечно не поспоришь, плюсанул.
          Но в данном случае необходимо использовать только для включения и отключения ssh. Так что не страшно

          –1
          Не ставится на macOS Catalina ((
            0
            Все ставится, я делал с каталины.
            сделайте
            sudo su
            и устанавливайте из под root
              +1
              Никогда не ставьте ничего от sudo — это дорога в ад. Делать надо так:
              cd ~
              git clone https://github.com/x56/airpyrt-tools
              mkvirtualenv -p python2.7 -a `pwd`/airpyrt-tools airpyrt-tools
              cd ~/airpyrt-tools
              python setup.py install
              
              python -m acp -t {ipv4-address} -p {password} --setprop dbug 0x3000
              etc...
              


              Как поставить mkvirtualenv — кажется описано тут, но это неточно

              Потом не забудьте
              rm -r ~/.virtualenvs/airpyrt-tools ~/airpyrt-tools
              
                0
                Я ставил с ключом --user

                python setup.py install --user
              0
              Я именно так и делал. Вот что получилось

              Заголовок спойлера
              sh-3.2# python setup.py install
              running install
              running bdist_egg
              running egg_info
              writing requirements to acp.egg-info/requires.txt
              writing acp.egg-info/PKG-INFO
              writing top-level names to acp.egg-info/top_level.txt
              writing dependency_links to acp.egg-info/dependency_links.txt
              writing entry points to acp.egg-info/entry_points.txt
              reading manifest file 'acp.egg-info/SOURCES.txt'
              writing manifest file 'acp.egg-info/SOURCES.txt'
              installing library code to build/bdist.macosx-10.15-x86_64/egg
              running install_lib
              running build_py
              creating build/bdist.macosx-10.15-x86_64/egg
              creating build/bdist.macosx-10.15-x86_64/egg/acp
              copying build/lib/acp/misc.py -> build/bdist.macosx-10.15-x86_64/egg/acp
              copying build/lib/acp/exception.py -> build/bdist.macosx-10.15-x86_64/egg/acp
              copying build/lib/acp/encryption.py -> build/bdist.macosx-10.15-x86_64/egg/acp
              copying build/lib/acp/property.py -> build/bdist.macosx-10.15-x86_64/egg/acp
              copying build/lib/acp/client.py -> build/bdist.macosx-10.15-x86_64/egg/acp
              copying build/lib/acp/cflbinary.py -> build/bdist.macosx-10.15-x86_64/egg/acp
              copying build/lib/acp/session.py -> build/bdist.macosx-10.15-x86_64/egg/acp
              copying build/lib/acp/__init__.py -> build/bdist.macosx-10.15-x86_64/egg/acp
              copying build/lib/acp/message.py -> build/bdist.macosx-10.15-x86_64/egg/acp
              copying build/lib/acp/basebinary.py -> build/bdist.macosx-10.15-x86_64/egg/acp
              copying build/lib/acp/cli.py -> build/bdist.macosx-10.15-x86_64/egg/acp
              copying build/lib/acp/__main__.py -> build/bdist.macosx-10.15-x86_64/egg/acp
              copying build/lib/acp/keystream.py -> build/bdist.macosx-10.15-x86_64/egg/acp
              byte-compiling build/bdist.macosx-10.15-x86_64/egg/acp/misc.py to misc.pyc
              byte-compiling build/bdist.macosx-10.15-x86_64/egg/acp/exception.py to exception.pyc
              byte-compiling build/bdist.macosx-10.15-x86_64/egg/acp/encryption.py to encryption.pyc
              byte-compiling build/bdist.macosx-10.15-x86_64/egg/acp/property.py to property.pyc
              byte-compiling build/bdist.macosx-10.15-x86_64/egg/acp/client.py to client.pyc
              byte-compiling build/bdist.macosx-10.15-x86_64/egg/acp/cflbinary.py to cflbinary.pyc
              byte-compiling build/bdist.macosx-10.15-x86_64/egg/acp/session.py to session.pyc
              byte-compiling build/bdist.macosx-10.15-x86_64/egg/acp/__init__.py to __init__.pyc
              byte-compiling build/bdist.macosx-10.15-x86_64/egg/acp/message.py to message.pyc
              byte-compiling build/bdist.macosx-10.15-x86_64/egg/acp/basebinary.py to basebinary.pyc
              byte-compiling build/bdist.macosx-10.15-x86_64/egg/acp/cli.py to cli.pyc
              byte-compiling build/bdist.macosx-10.15-x86_64/egg/acp/__main__.py to __main__.pyc
              byte-compiling build/bdist.macosx-10.15-x86_64/egg/acp/keystream.py to keystream.pyc
              creating build/bdist.macosx-10.15-x86_64/egg/EGG-INFO
              copying acp.egg-info/PKG-INFO -> build/bdist.macosx-10.15-x86_64/egg/EGG-INFO
              copying acp.egg-info/SOURCES.txt -> build/bdist.macosx-10.15-x86_64/egg/EGG-INFO
              copying acp.egg-info/dependency_links.txt -> build/bdist.macosx-10.15-x86_64/egg/EGG-INFO
              copying acp.egg-info/entry_points.txt -> build/bdist.macosx-10.15-x86_64/egg/EGG-INFO
              copying acp.egg-info/requires.txt -> build/bdist.macosx-10.15-x86_64/egg/EGG-INFO
              copying acp.egg-info/top_level.txt -> build/bdist.macosx-10.15-x86_64/egg/EGG-INFO
              zip_safe flag not set; analyzing archive contents…
              creating 'dist/acp-1.0-py2.7.egg' and adding 'build/bdist.macosx-10.15-x86_64/egg' to it
              removing 'build/bdist.macosx-10.15-x86_64/egg' (and everything under it)
              Processing acp-1.0-py2.7.egg
              Removing /Library/Python/2.7/site-packages/acp-1.0-py2.7.egg
              Copying acp-1.0-py2.7.egg to /Library/Python/2.7/site-packages
              acp 1.0 is already the active version in easy-install.pth
              Installing acp script to /usr/local/bin

              Installed /Library/Python/2.7/site-packages/acp-1.0-py2.7.egg
              Processing dependencies for acp==1.0
              Searching for pycrypto
              Reading pypi.org/simple/pycrypto
              Downloading files.pythonhosted.org/packages/60/db/645aa9af249f059cc3a368b118de33889219e0362141e75d4eaf6f80f163/pycrypto-2.6.1.tar.gz#sha256=f2ce1e989b272cfcb677616763e0a2e7ec659effa67a88aa92b3a65528f60a3c
              Best match: pycrypto 2.6.1
              Processing pycrypto-2.6.1.tar.gz
              Writing /tmp/easy_install-vwNGHR/pycrypto-2.6.1/setup.cfg
              Running pycrypto-2.6.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-vwNGHR/pycrypto-2.6.1/egg-dist-tmp-wFjFUV
              configure: error: in `/private/tmp/easy_install-vwNGHR/pycrypto-2.6.1':
              configure: error: C compiler cannot create executables
              See `config.log' for more details
              Traceback (most recent call last):
              File «setup.py», line 14, in «pycrypto»,
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/__init__.py", line 145, in setup
              return distutils.core.setup(**attrs)
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py", line 151, in setup
              dist.run_commands()
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 953, in run_commands
              self.run_command(cmd)
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
              cmd_obj.run()
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/command/install.py", line 67, in run
              self.do_egg_install()
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/command/install.py", line 117, in do_egg_install
              cmd.run()
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/command/easy_install.py", line 418, in run
              self.easy_install(spec, not self.no_deps)
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/command/easy_install.py", line 660, in easy_install
              return self.install_item(None, spec, tmpdir, deps, True)
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/command/easy_install.py", line 707, in install_item
              self.process_distribution(spec, dist, deps)
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/command/easy_install.py", line 752, in process_distribution
              [requirement], self.local_index, self.easy_install
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 782, in resolve
              replace_conflicting=replace_conflicting
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 1065, in best_match
              return self.obtain(req, installer)
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources/__init__.py", line 1077, in obtain
              return installer(requirement)
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/command/easy_install.py", line 679, in easy_install
              return self.install_item(spec, dist.location, tmpdir, deps)
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/command/easy_install.py", line 705, in install_item
              dists = self.install_eggs(spec, download, tmpdir)
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/command/easy_install.py", line 890, in install_eggs
              return self.build_and_install(setup_script, setup_base)
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/command/easy_install.py", line 1158, in build_and_install
              self.run_setup(setup_script, setup_base, args)
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/command/easy_install.py", line 1144, in run_setup
              run_setup(setup_script, args)
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/sandbox.py", line 253, in run_setup
              raise
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/contextlib.py", line 35, in __exit__
              self.gen.throw(type, value, traceback)
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/sandbox.py", line 195, in setup_context
              yield
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/contextlib.py", line 35, in __exit__
              self.gen.throw(type, value, traceback)
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/sandbox.py", line 166, in save_modules
              saved_exc.resume()
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/sandbox.py", line 141, in resume
              six.reraise(type, exc, self._tb)
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/sandbox.py", line 154, in save_modules
              yield saved
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/sandbox.py", line 195, in setup_context
              yield
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/sandbox.py", line 250, in run_setup
              _execfile(setup_script, ns)
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/sandbox.py", line 45, in _execfile
              exec(code, globals, locals)
              File "/tmp/easy_install-vwNGHR/pycrypto-2.6.1/setup.py", line 456, in
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py", line 151, in setup
              dist.run_commands()
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 953, in run_commands
              self.run_command(cmd)
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
              cmd_obj.run()
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/command/bdist_egg.py", line 172, in run
              cmd = self.call_command('install_lib', warn_dir=0)
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/command/bdist_egg.py", line 158, in call_command
              self.run_command(cmdname)
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/cmd.py", line 326, in run_command
              self.distribution.run_command(command)
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
              cmd_obj.run()
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/setuptools/command/install_lib.py", line 11, in run
              self.build()
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/command/install_lib.py", line 111, in build
              self.run_command('build_ext')
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/cmd.py", line 326, in run_command
              self.distribution.run_command(command)
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
              cmd_obj.run()
              File "/tmp/easy_install-vwNGHR/pycrypto-2.6.1/setup.py", line 251, in run

              File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/cmd.py", line 326, in run_command
              self.distribution.run_command(command)
              File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
              cmd_obj.run()
              File "/tmp/easy_install-vwNGHR/pycrypto-2.6.1/setup.py", line 278, in run

              RuntimeError: autoconf error
              sh-3.2#
                +2
                Поставьте/обновите xCode и запустите его один раз для того, чтобы принять лицензионное соглашение. При установке xCode должно быть отмечено «Command line tools». После этого компилятор C++ сможет собрать библиотеку pycrypto.
                  0
                  Спасибо, все получилось
                  0
                  КАК у вас вообще получается запустить КАК?!?!?

                  sh-3.2# python setup.py install
                  /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python: can't open file 'setup.py': [Errno 2] No such file or directory
                  sh-3.2# python /Users/maksim/Downloads/airpyrt-tools-master/setup.py install
                  running install
                  running bdist_egg
                  running egg_info
                  writing requirements to acp.egg-info/requires.txt
                  writing acp.egg-info/PKG-INFO
                  writing top-level names to acp.egg-info/top_level.txt
                  writing dependency_links to acp.egg-info/dependency_links.txt
                  writing entry points to acp.egg-info/entry_points.txt
                  error: package directory 'acp' does not exist
                    0
                    С помощью друга разобрались и всё получилось, спасибо!

                    НО

                    Недосказали, для таких зелёных как я, что для успешной установки надо в терминале перейти в папку — эта для вас мелочь оказалась критичной.
                  0

                  А как штатными средствами посмотреть регион / доступные возможности? С платформ iOS / Mac OS.

                    0
                    Запустите программу AirPort и посмотрите. Программа доступна для iOS и mac OS
                      0

                      Может я настолько невнимательный, но я так и не нашёл там этих сведений.

                        0
                        Открываете AirPort, нажимаете на свое устройство, далее «править», «дополнительно», «настройки wi-fi», «Страна».
                        Если у Вас страна из списка из моей статьи, то beamforming и 80MHz полоса для Вас недоступны, можно переделывать, например как я, на США.
                          0

                          Обратил внимание, что это шаманство из коробки работает в старой виндовой версии airport utilities. Т.е. там можно просто выбрать страну и соответствующие опции вручную.

                            0
                            Версию Apple Airport Utility, в которой такое возможно, озвучьте пожалуйста.
                              0
                              Apple никогда не давала менять SKU. У человека скорее всего сразу была американская airport
                        0
                        Благодарю, всё получилось =)
                        0
                        Чтобы на маке увидеть инфу как на скриншоте в конце статьи, нужно кликнуть по иконке соединения в строке меню с зажатым Option/Alt.
                        0
                        В теории можно и в Airport Express MC414 сделать usb порт полноценным?
                          0
                          Ребят, может кто-нибудь запилить видеоинструкцию, а то не особо понятно, что к чему…
                            +1
                            Ребят, при всем уважении, это же не пикабу! Какие еще видеоинструкции?!
                              0

                              Хотя бы просто запись экрана сделать, на маке ведь это легко делается. Очень актуальная тема здесь рассматривается, много людей, включая меня, будут благодарны. Ну и на Пикабу можно выложить)

                                0

                                Вы лучше напишите, с каким конкретно шагом вы не справились?

                                  0
                                  С включением ssh. Я конечно понимаю, что здесь сидят гуру, но мне как нубу непонятно ничего
                                  Выдача терминала
                                  INFO:connecting to host {192.168.1.1}:5009
                                  Traceback (most recent call last):
                                  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 162, in _run_module_as_main
                                  "__main__", fname, loader, pkg_name)
                                  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 72, in _run_code
                                  exec code in run_globals
                                  File "/Users/marina/Downloads/airpyrt-tools-master/acp/__main__.py", line 2, in cli.main()
                                  File «acp/cli.py», line 228, in main
                                  c.connect()
                                  File «acp/client.py», line 21, in connect
                                  self.session.connect()
                                  File «acp/session.py», line 30, in connect
                                  self.sock.connect((self.target, self.port))
                                  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 228, in meth
                                  return getattr(self._sock,name)(*args)
                                  socket.gaierror: [Errno 8] nodename nor servname provided, or not known
                                    0

                                    Та же ошибка. Вы победили ее??

                                      0
                                      нет. Жду помощи. Что-то мне подсказывает, что нужно будет установить Xcode, одной утилиты для терминала недостаточно. Попробую позже. У Вас Time Capsule 2Tb, 7.9.1 прошивка?
                                        0

                                        Xcode надо было установить априори же.
                                        Да. У меня аналогичный девайс

                                    0
                                    на Catalina также
                                    Терминал
                                    INFO:connecting to host {192.168.1.1}:5009
                                    Traceback (most recent call last):
                                    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 174, in _run_module_as_main
                                    "__main__", fname, loader, pkg_name)
                                    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 72, in _run_code
                                    exec code in run_globals
                                    File «build/bdist.macosx-10.15-x86_64/egg/acp/__main__.py», line 2, in File «build/bdist.macosx-10.15-x86_64/egg/acp/cli.py», line 228, in main
                                    File «build/bdist.macosx-10.15-x86_64/egg/acp/client.py», line 21, in connect
                                    File «build/bdist.macosx-10.15-x86_64/egg/acp/session.py», line 30, in connect
                                    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 228, in meth
                                    return getattr(self._sock,name)(*args)
                                    socket.gaierror: [Errno 8] nodename nor servname provided, or not known
                                      0

                                      Я внутри я хакер. Сейчас думаю над своей задачей: установка nodejs и развертывание homebridge.
                                      Если поможет. Из того что я у вас вижу:
                                      Заходите из под root#
                                      И уберите фигурные скобки полей адреса и пароля

                                        0
                                        Да, отлично! Всё получилось! Мешали фигурные скобки) Xcode не успел поставить, оказалось достаточно утилиты для терминала. Как теперь поудалять всё, что установилось? Или оставить?
                                          0
                                          Ещё момент — после изменения региона на TC, перестал видеться диапазон 5ГГц на MacBook Pro 2017. Решение — просто передвинуть Ваши предпочитаемые сети вверх по списку «Предпочтительные сети» в Системные настройки-Сеть-WiFi-Дополнительно… и перезагрузить комп.
                              +1
                              Огромное спасибо! Наконец-то дождались.

                              Замечания такие. Для отключения ssh установить dbug в 0x0000 и перегрузить недостаточно. По крайней мере у меня на двух башнях с 7.9.1 это не сработало. Порт ssh всё равно открыт и светится наружу с вместе портом 5001. Для отключения необходимо в консоли ssh подключения к airport-у выполнить «acp remove dbug» и перегрузить.
                                0
                                Спасибо за дельный комментарий, обновил статью.
                                Проверил на time capsule 7.9.1 — действительно необходимо режим debug отключать через acp.
                                0

                                Всем доброго дня!
                                Я хотел бы предложить пойти дальше в эксперименте, если у кого-то получилось сделать по этой инструкции. И, возможно, наши намеренья совпадают. Мог бы кто-то из вас, гуру, попробовать поставить пакетом homebridge homekit на капсулу?
                                Жаль, что моих знаний на это не хватает

                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                Самое читаемое