[PYTHON] Ich habe eine Amazon Web Service Dash-Schaltfläche erstellt

Einführung

awsボタン.jpg

Der Titel fehlt. Schließlich müssen die heutigen Infrastrukturingenieure in der Lage sein, einen der Server per Knopfdruck zu bedienen. Ich habe versucht, das n-te Abkochpaket zu schnüffeln und das Dash-Button-Ereignis (Python auf Ubuntu) aufzunehmen, indem ich einfach die aws-Cli wie unten gedrückt habe.

--Amazon EC2 Dash Button (EC2 VM erstellen) --Aws Lambda Dash Button (lamda aufrufen)

Es ist eine Reproduktion des folgenden Referenzartikels. How I Hacked Amazon’s $5 WiFi Button to track Baby Data – Medium

Dash-Button-Setup

Leicht verständlicher Kommentar. -> Amazon Dash Button Super Speed-Kommentar --Qiita

  1. Klicken Sie bei Amazon auf die Schaltfläche Dash, um zu Ihrem Haus zu gelangen
  2. Starten Sie die Amazon Smartphone App (gemäß Bedienungsanleitung).
  3. Wählen Sie im Menü oben links "Account Service" -> "Dash Terminal Setup a new terminal" (gemäß Bedienungsanleitung).
  4. Halten Sie die Dash-Taste 6 Sekunden lang gedrückt, bis die LED blau leuchtet (gemäß Bedienungsanleitung).
  5. "Verbinden" in der App (gemäß Bedienungsanleitung)
  6. Geben Sie die WLAN-Verbindungsinformationen in die App ein (gemäß Bedienungsanleitung).
  7. Jedes Produkt (anders als in der Bedienungsanleitung)

Ereignisse der Dash-Schaltfläche erfassen

Vorbereiten der Python-Umgebung

$ sudo apt-get install tcpdump python-crypto python-scapy
#Ich möchte Scapy verwenden, aber ich kann dies und das hinzufügen

$ pip show scapy
Name: scapy
Version: 2.2.3
Location: /usr/lib/python2.7/dist-packages
Requires:
#OK, wenn Scapy installiert werden kann

Rufen Sie die MAC-Adresse der Dash-Schaltfläche ab

Erstellen und führen Sie dash-listen-1.py aus.

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)

$ sudo python dash-listen-1.py 
WARNING: No route found for IPv6 destination :: (no default route?)
#Da es bisher ausgegeben wurde, drücken Sie die Dash-Taste
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[]
$ 

Jetzt können Sie die MAC-Adresse erhalten.

Ereignis "Dash-Schaltfläche abrufen" im Beispielcode

Fahren Sie mit der Erstellung und Ausführung von dash-listen-2.py fort.

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)

$ sudo python dash-listen-2.py 
WARNING: No route found for IPv6 destination :: (no default route?)
#Da es bisher ausgegeben wurde, drücken Sie die Dash-Taste
Amazon dash button Pushed.
$

Jetzt können Sie die Veranstaltung abholen.

Amazon Web Service Dash button Nun, es ist endlich das Hauptthema, aber am Ende habe ich nur die ↑ "Drucken" Amazon Dash-Taste gedrückt. "" Mit dem schlampigen Befehl von aws cli.

Das Folgende sind die Annahmen, die vorbereitet wurden.

Ich habe Amazon EC2 Dash Button ausprobiert

Erstellen Sie 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")
        #Gerade hier hinzugefügt(Der Wortlaut des Drucks darauf wurde ebenfalls ein wenig geändert)
        sys.exit()

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

Unten die Konsole vor der Ausführung (keine Instanz) before.png

Dann ausführen.


$ sudo python  dash-ec2.py 
WARNING: No route found for IPv6 destination :: (no default route?)
#Da es bisher ausgegeben wurde, drücken Sie die Dash-Taste
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", 
...

Unten ist die Konsole nach der Ausführung. (Sie können mit nur einer Taste instanziieren! I-98abXXXXX) after.png

Ich habe Aws Lambda Dash Button ausprobiert

Dieses Mal habe ich im Voraus eine normale Funktion namens Hallo Welt erstellt. lambda.png Es wird nur "Hallo von Lambda" ausgegeben.

Erstellen Sie 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")
        #Gerade hier hinzugefügt(Der Wortlaut des Drucks darauf wurde ebenfalls ein wenig geändert)
        sys.exit()

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

Dann ausführen.


$ sudo python dash-lambda.py 
WARNING: No route found for IPv6 destination :: (no default route?)
#Da es bisher ausgegeben wurde, drücken Sie die Dash-Taste
Aws lambda button Pushed.
{
    "LogResult": "XXXXXXXXXXXXXX", 
    "StatusCode": 200
}
$ cat output.txt 
"Hello from Lambda"$ 
#Das Ausgabeergebnis wird übernommen!

Ich konnte es so machen.

abschließend

――Ich bin nicht herausgekommen, auch wenn ich es gegoogelt habe, also dachte ich, dass es erst jetzt war und tat es mit Schwung ――Jedos, wenn Sie "Amazon Dash Button (Programmiersprache)" googeln, finden Sie viele Artikel aus Übersee, was praktisch ist. --Wenn Amazon IoT Button überhaupt in Japan erscheint ... [Ich habe versucht, AWS IoT Button #reinvent | Developers.IO zu zerlegen](http://dev.classmethod.jp/cloud/aws/decomposition-aws- iot-button /) »Eigentlich dachte ich zuerst, ich würde es mit Fenstern machen, aber es war am ärgerlichsten, Scapy zu verwenden, und als ich es bemerkte, legte ich Ubuntu in das Chrombuch und tat es darauf ――Ich war ein wenig beeindruckt, dass Sie einen Server per Knopfdruck erstellen und zu einem guten Preis an einen internen App-Techniker verkaufen konnten? ――Und wenn Sie spielen, wird die Benachrichtigung des Smartphones Interessanterweise w

スマフォのスクショ.png

――Seit ich es nicht mehr benutze, habe ich es deaktiviert und zurückgesetzt. Amazon.co.jp-Hilfe: Dash-Schaltfläche deaktivieren

das ist alles.

Recommended Posts

Ich habe eine Amazon Web Service Dash-Schaltfläche erstellt
Ich habe einen Ansible-Installer gemacht
Ich habe einen Xubuntu-Server erstellt.
Ich habe den Amazon Dash Button gehackt und mich bei Salesforce registriert
Ich habe einen Anpanman-Maler diskriminiert
Ich habe ein Dash-Docset für Holoviews erstellt
Ich habe eine Online-Frequenzanalyse-App erstellt
Ich habe ein alternatives Modul für japandas.DataReader erstellt
Ich habe eine WEB-Bewerbung bei Django gemacht
Ich habe ein Extenum-Paket erstellt, das die Enumeration erweitert
Hindernis (schwarz) Ich habe eine Raupe mit automatischer Vermeidung hergestellt.
"Amazon Dash Button" ist in Japan gelandet, aber ich habe es gewagt, es selbst zu machen
Ich habe einen IFTTT-Knopf gemacht, der den Eingang 2-Sesam mit 1 Knopf (über AWS Lambda) entsperrt.