{"id":2428,"date":"2020-06-26T22:16:04","date_gmt":"2020-06-26T22:16:04","guid":{"rendered":"http:\/\/blog.rastersoft.com\/?p=2428"},"modified":"2020-10-21T12:15:34","modified_gmt":"2020-10-21T12:15:34","slug":"a-ritmo-de-conga-y-3","status":"publish","type":"post","link":"https:\/\/blog.rastersoft.com\/?p=2428","title":{"rendered":"A ritmo de conga (3)"},"content":{"rendered":"\n<p><strong>DISCLAIMER:<\/strong> no ser\u00e9 responsable si alguien decide seguir mis pasos y se carga su aspiradora. En principio todo lo que cuento deber\u00eda ser seguro, pero por motivos obvios no me puedo responsabilizar de lo que hagan otras personas, s\u00f3lo de lo que haga yo.<\/p>\n\n\n\n<p>Estaba empezando a preparar un programita para intentar dar \u00f3rdenes a la aspiradora, y me encontr\u00e9 con que el emparejado no es tan sencillo como cre\u00eda: simplemente entrando en el servidor web de la aspiradora y rellenando el formulario no era suficiente, as\u00ed que tocaba seguir analizando.<\/p>\n\n\n\n<figure class=\"wp-block-video aligncenter meme\"><video height=\"164\" style=\"aspect-ratio: 220 \/ 164;\" width=\"220\" controls src=\"https:\/\/blog.rastersoft.com\/wp-content\/uploads\/2020\/06\/fuck.mp4\"><\/video><\/figure>\n\n\n\n<p>Como ya coment\u00e9 en la primera parte, cuando la aspiradora se pone en modo <em>emparejamiento<\/em>, lo que hace es convertirse en un <a href=\"https:\/\/en.wikipedia.org\/wiki\/Wireless_access_point\">punto de acceso WiFi<\/a> con la IP 192.168.4.1, de modo que la <em>app<\/em> se conecta a dicha red y configura los par\u00e1metros de la WiFi real, adem\u00e1s de <em>algo m\u00e1s<\/em>. Para conseguir esos datos, lo que hice fue ir de nuevo a mi <a href=\"https:\/\/en.wikipedia.org\/wiki\/Raspberry_Pi\">Raspberry Pi<\/a> configurada como punto de acceso, y modificar, primero, el fichero <em>\/etc\/hostapd\/hostapd.conf<\/em> para dejarlo de manera que <em>parezca<\/em> una aspiradora. Para ello a\u00f1ad\u00ed un # a estas l\u00edneas para comentarlas y que no se procesasen (de manera que la red WiFi estar\u00eda abierta), y cambi\u00e9 el SSID por <em>CongaGyro_123456<\/em>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted mycode\">country_code=ES\ninterface=wlan0\nhw_mode=g\nchannel=1\nmacaddr_acl=0\nauth_algs=1\nignore_broadcast_ssid=0\n#wpa=2\n#wpa_key_mgmt=WPA-PSK\n#wpa_pairwise=TKIP\nrsn_pairwise=CCMP\nssid=CongaGyro_123456\n#wpa_passphrase=xxxxxxxxx<\/pre>\n\n\n\n<p>A continuaci\u00f3n, en <em>\/etc\/dnsmasq.conf<\/em> cambi\u00e9 los rangos de direcciones IP que se sirven para que sea 192.168.4.10 a 192.168.4.40, y asign\u00e9 al <em>gateway<\/em> la IP 192.168.4.1.<\/p>\n\n\n\n<p>Por \u00faltimo, edit\u00e9 el fichero <em>\/etc\/dhcpcd.conf<\/em> y en \u00e9l asign\u00e9 a la WLAN la direcci\u00f3n IP 192.168.4.1, la misma que tendr\u00eda una aspiradora.<\/p>\n\n\n\n<figure class=\"wp-block-video aligncenter meme\"><video height=\"192\" style=\"aspect-ratio: 320 \/ 192;\" width=\"320\" controls src=\"https:\/\/blog.rastersoft.com\/wp-content\/uploads\/2020\/06\/working.mp4\"><\/video><\/figure>\n\n\n\n<p>Tras esto reinici\u00e9 la placa para que los nuevos valores tomasen efecto, entr\u00e9 por la ethernet, y lanc\u00e9 una instancia de <em>netcat<\/em> para que el puerto 80 estuviese abierto y me permitiese capturar todo. Al ser, adem\u00e1s, un puerto por debajo de 1024, es necesario utilizar <em>sudo<\/em>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted mycode\">sudo nc -l -p 80<\/pre>\n\n\n\n<p>Y tras esto, lo que hice fue ir a la <em>app<\/em> oficial, borrar mi aspiradora e indicarle que quer\u00eda configurar una nueva. La <em>app<\/em> encontr\u00f3 la falsa aspiradora, se conect\u00f3 a su WiFi, intent\u00f3 configurarla mediante el puerto 80, y&#8230; <em>\u00a1Bingo!<\/em><\/p>\n\n\n\n<pre class=\"wp-block-preformatted mycode\">GET \/robot\/getRobotInfo.do?ssid=AAAAAAAA&amp;pwd=BBBBBBBB&amp;jDomain=bl-app-eu.robotbona.com&amp;jPort=8082&amp;sDomain=bl-im-eu.robotbona.com&amp;sPort=20008&amp;cleanSTime=5 HTTP\/1.1\nUser-Agent: blapp\nAccept: application\/json\nHost: 192.168.4.1\nConnection: Keep-Alive\nAccept-Encoding: gzip<\/pre>\n\n\n\n<p>Vemos que env\u00eda algo m\u00e1s que el SSID y la clave; en concreto a\u00f1ade dos dominios de Internet, que es a donde se conecta para la parte HTTP y la parte de su propio protocolo. Es posible que se pueda cambiar directamente por la IP de un servidor, pero de momento prefiero montar un DNS propio y que tire de \u00e9l, para asegurarme de que todo funciona.<\/p>\n\n\n\n<p>Para estar seguro de que con esto ya funcionaba, escrib\u00ed un peque\u00f1o programa en python que se conectase al puerto 80, enviase exactamente eso, y luego esperase la respuesta (por completitud). Obviamente, al ser <a href=\"https:\/\/en.wikipedia.org\/wiki\/Hypertext_Transfer_Protocol\">HTTP<\/a>, cada nueva l\u00ednea tiene que ser con <em>\\r\\n<\/em>, y el final se indica con <em>\\r\\n\\r\\n<\/em>. Y esta fue la respuesta:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted mycode\">HTTP\/1.0 200 OK\n\n{\n  \"result\":\"0\",\n  \"msg\":\"OK\",\n  \"version\":\"1.0\",\n  \"data\":{\n    \"deviceId\":\"zzzzzzzzzzzzzz\",\n    \"deviceType\":\"1\",\n    \"appKey\":\"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy\",\n    \"authCode\":\"xxxxxx\",\n    \"errorCode\":\"0xnnnnnnnn\"\n  }\n}<\/pre>\n\n\n\n<p>Y esta vez s\u00ed, la aspiradora se conect\u00f3 correctamente al servidor remoto y qued\u00f3 lista para trabajar.<\/p>\n\n\n\n<figure class=\"wp-block-video aligncenter meme\"><video height=\"186\" style=\"aspect-ratio: 320 \/ 186;\" width=\"320\" controls src=\"https:\/\/blog.rastersoft.com\/wp-content\/uploads\/2020\/06\/tadah_harry_potter.mp4\"><\/video><\/figure>\n\n\n\n<p><a href=\"https:\/\/blog.rastersoft.com\/?p=2441\">Parte 4<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>DISCLAIMER: no ser\u00e9 responsable si alguien decide seguir mis pasos y se carga su aspiradora. En principio todo lo que cuento deber\u00eda ser seguro, pero por motivos obvios no me puedo responsabilizar de lo que hagan otras personas, s\u00f3lo de lo que haga yo. Estaba empezando a preparar un programita para intentar dar \u00f3rdenes a &hellip; <a href=\"https:\/\/blog.rastersoft.com\/?p=2428\" class=\"more-link\">Seguir leyendo <span class=\"screen-reader-text\">A ritmo de conga (3)<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,16,7],"tags":[],"class_list":["post-2428","post","type-post","status-publish","format-standard","hentry","category-cacharreo","category-opendonita","category-tutoriales"],"_links":{"self":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/2428","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2428"}],"version-history":[{"count":12,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/2428\/revisions"}],"predecessor-version":[{"id":2595,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/2428\/revisions\/2595"}],"wp:attachment":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2428"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2428"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2428"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}