[PYTHON] J'ai créé un bouton Amazon Web Service Dash

introduction

awsボタン.jpg

Le titre manque. Après tout, les ingénieurs d'infrastructure d'aujourd'hui doivent être en mesure de faire l'un des serveurs en appuyant simplement sur un bouton. J'ai essayé de renifler le nième paquet de décoction et de récupérer l'événement du bouton du tableau de bord (python sur ubuntu) en appuyant simplement sur le cli aws comme ci-dessous.

Il s'agit d'une reproduction de l'article de référence suivant. How I Hacked Amazon’s $5 WiFi Button to track Baby Data – Medium

Configuration du bouton du tableau de bord

Commentaires faciles à comprendre. -> Commentaire sur le bouton Amazon Dash Super Speed - Qiita

  1. Cliquez sur le bouton Dash sur amazon pour atteindre votre maison
  2. Lancez l'application pour smartphone Amazon (conformément au manuel d'instructions)
  3. Sélectionnez "Service de compte" -> "Dash Terminal Configurer un nouveau terminal" dans le menu supérieur gauche (selon le manuel d'instructions)
  4. Appuyez sur le bouton Dash et maintenez-le enfoncé pendant 6 secondes jusqu'à ce que le voyant devienne bleu (selon le manuel d'instructions)
  5. "Connect" dans l'application (selon le manuel d'instructions)
  6. Entrez les informations de connexion wifi dans l'application (selon le manuel d'instructions)
  7. Tout produit (différent du manuel d'instructions)

Ramasser les événements du bouton Dash

Préparer l'environnement python

$ sudo apt-get install tcpdump python-crypto python-scapy
#Je veux utiliser scapy, mais je peux ajouter ceci et cela

$ pip show scapy
Name: scapy
Version: 2.2.3
Location: /usr/lib/python2.7/dist-packages
Requires:
#OK si scapy peut être installé

Obtenez l'adresse MAC du bouton Dash

Créez et exécutez dash-listen-1.py.

dash-listen-1.py



from scapy.all import *

def arp_display(pkt):
  if pkt[ARP].op == 1: #who-has (request)
    if pkt[ARP].psrc == '0.0.0.0': # ARP Probe
      print "ARP Probe from: " + pkt[ARP].hwsrc

print sniff(prn=arp_display, filter="arp", store=0, count=10)

--Remplacer la sonde ARP si nécessaire

$ sudo python dash-listen-1.py 
WARNING: No route found for IPv6 destination :: (no default route?)
#Comme il est sorti jusqu'à présent, appuyez sur le bouton Dash
ARP Probe from: XX:XX:XX:XX:XX:XX
ARP Probe from: XX:XX:XX:XX:XX:XX
ARP Probe from: XX:XX:XX:XX:XX:XX
^C[]
$ 

Vous pouvez maintenant obtenir l'adresse MAC.

Obtenir l'événement du bouton Dash dans un exemple de code

Continuez à créer et à exécuter dash-listen-2.py.

dash-listen-2.py



from scapy.all import *
def arp_display(pkt):
  if pkt[ARP].op == 1:
    if pkt[ARP].psrc == '0.0.0.0': # ARP probe as your env
      if pkt[ARP].hwsrc == 'XX:XX:XX:XX:XX:XX': # MAC address as your env 
        print "Amazon dash button Pushed."
        sys.exit()

print sniff(prn=arp_display, filter="arp", store=0, count=10)

--Remplacer la sonde ARP si nécessaire


$ sudo python dash-listen-2.py 
WARNING: No route found for IPv6 destination :: (no default route?)
#Comme il est sorti jusqu'à présent, appuyez sur le bouton Dash
Amazon dash button Pushed.
$

Vous pouvez maintenant récupérer l'événement.

Amazon Web Service Dash button Eh bien, c'est finalement le sujet principal, mais à la fin, je viens de remplacer le ↑ "print" Amazon dash button Pushed. "" Avec la commande bâclée de aws cli.

Voici les hypothèses qui ont été préparées.

--Introduit aws cli et certifié avec aws configure --ec2 ami existe déjà (cette fois, il est dans la bibliothèque Amazon Linux) --lambda fonction créée (et IAM)

J'ai essayé le bouton de tableau de bord Amazon EC2

Créez dash-ec2.py.

dash-ec2.py



from scapy.all import *
def arp_display(pkt):
  if pkt[ARP].op == 1: #who-has (request)
    if pkt[ARP].psrc == '0.0.0.0': # ARP probe as your env
      if pkt[ARP].hwsrc == 'XX:XX:XX:XX:XX:XX': # MAC address as your env 
        print "Amazon EC2 dash button Pushed."
        os.system("aws ec2 run-instances --image-id ami-0c11b26d --count 1 --instance-type t2.micro")
        #Juste ajouté ici(Le libellé de l'impression dessus est également légèrement modifié)
        sys.exit()

print sniff(prn=arp_display, filter="arp", store=0, count=10)

--Création approximative d'une instance EC2 --ami-0c11b26d est un type simple d'Amazon Linux

Ci-dessous, la console avant exécution (pas d'instance) before.png

Puis exécutez.


$ sudo python  dash-ec2.py 
WARNING: No route found for IPv6 destination :: (no default route?)
#Comme il est sorti jusqu'à présent, appuyez sur le bouton Dash
Amazon EC2 dash button Pushed.
{
    "OwnerId": "XXXXXXXXXXX", 
    "ReservationId": "XXXXXXXXXX", 
    "Groups": [], 
    "Instances": [
        {
            "Monitoring": {
                "State": "disabled"
            }, 
            "PublicDnsName": "", 
            "RootDeviceType": "ebs", 
            "State": {
                "Code": 0, 
                "Name": "pending"
            }, 
            "EbsOptimized": false, 
            "LaunchTime": "2016-12-06T11:48:25.000Z", 
            "PrivateIpAddress": "XXX.XXX.XXX.XXX", 
            "ProductCodes": [], 
            "VpcId": "vpc-XXXXXXXXXX", 
            "StateTransitionReason": "", 
            "InstanceId": "i-98abXXXXX", 
            "ImageId": "ami-0c11b26d", 
...

Ci-dessous se trouve la console après l'exécution. (Vous pouvez instancier avec un seul bouton! I-98abXXXXX) after.png

J'ai essayé Aws Lambda Dash Button

Cette fois, j'ai créé à l'avance une fonction normale appelée hello world. lambda.png Il sort simplement "Hello from Lambda".

Créez dash-lambda.py.

dash-lambda.py



from scapy.all import *
def arp_display(pkt):
  if pkt[ARP].op == 1: #who-has (request)
    if pkt[ARP].psrc == '0.0.0.0': # ARP probe as your env
      if pkt[ARP].hwsrc == 'XX:XX:XX:XX:XX:XX': # MAC address as your env 
        print "Aws lambda button Pushed."
        os.system("aws lambda invoke --invocation-type RequestResponse --function-name helloworld --region ap-northeast-1 --log-type Tail --payload '{}' output.txt")
        #Juste ajouté ici(Le libellé de l'impression dessus est également légèrement modifié)
        sys.exit()

print sniff(prn=arp_display, filter="arp", store=0, count=10)

Puis exécutez.


$ sudo python dash-lambda.py 
WARNING: No route found for IPv6 destination :: (no default route?)
#Comme il est sorti jusqu'à présent, appuyez sur le bouton Dash
Aws lambda button Pushed.
{
    "LogResult": "XXXXXXXXXXXXXX", 
    "StatusCode": 200
}
$ cat output.txt 
"Hello from Lambda"$ 
#Le résultat de sortie est pris!

J'ai pu le faire comme ça.

en conclusion

Je ne suis pas sorti même si je l'ai recherché sur Google, alors j'ai pensé que c'était seulement maintenant et je l'ai fait avec élan ――Cependant, si vous recherchez sur Google "Amazon dash button (langage de programmation)", vous pouvez trouver de nombreux articles d'outre-mer, ce qui est pratique. --Si Amazon IoT Button apparaît au Japon en premier lieu ... [J'ai essayé de désassembler AWS IoT Button #reinvent | Developers.IO](http://dev.classmethod.jp/cloud/aws/decomposition-aws- bouton iot /) ―― En fait, au début, je pensais que je le ferais avec des fenêtres, mais c'était le plus ennuyeux de mettre scapy, et quand j'ai remarqué, j'ai mis ubuntu dans le livre de chrome et je l'ai fait dessus «J'ai été un peu impressionné par le fait que vous puissiez créer un serveur en appuyant simplement sur un bouton, et je pense qu'il se vendra aux ingénieurs d'applications internes à un bon prix. ――Et lorsque vous jouez, la notification du smartphone est intéressant w

スマフォのスクショ.png

――Depuis que j'ai fini de l'utiliser, je l'ai désactivé et réinitialisé. Aide d'Amazon.co.jp: Désactiver le bouton de tableau de bord

c'est tout.

Recommended Posts

J'ai créé un bouton Amazon Web Service Dash
J'ai créé un installateur Ansible
J'ai créé un serveur Xubuntu.
J'ai piraté le bouton Amazon Dash et je me suis inscrit à Salesforce
J'ai fait un peintre discriminateur Anpanman
J'ai créé un docset de tableau de bord pour Holoviews
J'ai créé une application d'analyse de fréquence en ligne
J'ai créé un module alternatif pour les japandas.
J'ai fait une application WEB avec Django
J'ai créé un package extenum qui étend enum
Obstacle (noir) J'ai fait une chenille d'évitement automatique.
"Amazon Dash Button" a atterri au Japon, mais j'ai osé le faire moi-même
J'ai fait un bouton IFTTT qui déverrouille l'entrée 2 lock sésame avec 1 bouton (via AWS Lambda)