Archive

Netwerk scanner

Op een gemiddelde thuis en bedrijfsnetwerk zijn meestal best wel veel apparaten aanwezig. Soms is het wel handig om even snel te kunnen achterhalen welk apparaat er nou verbonden is en met welk IP adres.

Denk hierbij aan de laptops, tablets, IP camera’s, Smart TV en ga zo maar door.

Met het volgende python script kun je een snelle scan uitvoeren, waarbij je kunt zien welk MAC adres met welk IP adres op het moment van uitvoeren van het script online zijn.

import scapy.all as scapy
import socket

hostname = socket.gethostname()
ipadres2 = socket.gethostbyname(f"{hostname}.local")
ipadres3 = str(ipadres2).split('.')
ipadres3[-1] = '0'
ipadres = ('.'.join(ipadres3))
NETWORK = f"{ipadres}/24"

def scan(ip):
    arp_request = scapy.ARP(pdst=ip)
    broadcast = scapy.Ether(dst='ff:ff:ff:ff:ff:ff')
    arp_request_broadcast = broadcast/arp_request
    answered_list = scapy.srp(arp_request_broadcast, timeout=1, verbose=False)[0]

    for host in answered_list:
        print(host[1].psrc, host[1].src)

scan(NETWORK)

In dit script maken we gebruik van het script om het lokale IP adres op te vragen. Deze zetten we om tot een variabel waarmee je meteen de IP range gaat scannen waar je op dat moment mee verbonden bent. Met de module scapy.all voeren we op de range een scan uit en wordt het resultaat direct uitgeprint.

Het script dient als super user (sudo) uitgevoerd te worden.

Lokaal IP adres achterhalen

Een computer heeft een IP adres nodig op contact te maken met het internet of een lokaal intranet. Dit IP adres wordt bij de meeste computers automatisch toegewezen en is meestal dynamisch. Dit houd in dat tekens als je de computer opnieuw opstart het IP adres kan veranderen.

Je hebt als het wenselijk is de mogelijkheid om het IP adres hard in te stellen, of dat je op je router aan geeft dat je computer steeds hetzelfde IP adres toegewezen moet krijgen. Hierdoor weet je altijd welk IP adres je computer heeft.

Opvragen IP adres in Python

In python heb je de mogelijkheid om het IP adres op te kunnen vragen van je computer. Dit kun je doen door dit eenvoudig script.

from socket import gethostname,gethostbyname
ipadres = gethostbyname(f"{gethostname()}.local")
print(ipadres)

In dit script wordt het IP adres simpelweg uitgeprint, maar je kunt de variabel ipadres overal in je script gebruiken.

GPIO vochtsensor instellen

Op een Raspberry Pi kun je verschillende sensoren aansluiten op de pinnetjes van het bord. Een leuke en ook praktische sensor om te gebruiken is de vocht sensor. Deze kan je informatie geven of iets vochtig is of droog. Op deze pagina wordt uitgelegd hoe een een eenvoudige vochtsensor aansluit op een Raspberry Pi.

Wat je nodig hebt is een

Een vocht meter geeft aan of een hij vocht meet of niet. Digitaal vertaald kun je zeggen dat het 0 of 1 is.
Met een kort python3 script kun je dit makkelijk digitaal zichtbaar maken, maar het begint bij het correct aansluiten van de sensor aan je Raspberry Pi.

Je gebruikt bij de vochtsensor de volgende pins

  • Een 5 volt pin.
  • Een ground (aarde) pin.
  • Een GPIO pin.

Er zijn verschillende Raspberry Pi versies waarbij mogelijk de pins anders kunnen zijn dan hoe het vermeld staat op dit plaatje. Het idee blijft altijd wel hetzelfde dat de sensor altijd stroom, aarde en een GPIO in nodig heeft. Om een beeld te krijgen hoe het bij jou Pi bordje is ingedeeld kun je in de terminal op je Raspberry Pi het volgende invoeren:

pinout

Het python script

In het volgende python3 script maken we gebruik van de GPIO 21 pin. In de variabel pinnr benoemen we dan ook het juiste pinnummer.
GPIO.input() geeft aan of de sensor vocht detecteert of niet. Deze geeft het weer in de waarde 0 (vochtig) of 1 (droog)

#!/usr/bin/python3
import RPi.GPIO as GPIO
from time import sleep
pinnr = 21
GPIO.setmode(GPIO.BCM)
GPIO.setup(pinnr, GPIO.IN)

def waterdetectie(pinnr):
    status = int(GPIO.input(pinnr))
    if status == 0:
        print("Water gedetecteerd in de bloempot.")
        sleep(300)
    elif status == 1:
        print("Droogte gedetecteerd in de bloempot.")
        sleep(300)

while True:
    waterdetectie(pinnr)

pip en modules installeren op Linux voor Python

In Python kun je een boel doen. Dit wordt nog verder verruimt met extra modules die je kunt installeren.

Denk hierbij aan

  • Het kunnen sturen van mail.
  • Tekst kopieren en plakken.
  • Gebruik maken van hardware componenten zoals
    • WiFi
    • Bluetooth
    • Webcam

Je zult ziet dat bijna in alle python script gebruik gemaakt wordt van modules. Deze worden altijd boven aan het script geplaatst en zo als eerste opgehaald en ingelezen, zodat deze in de rest van het script gebruikt kan worden.

  • import os
  • import sys
  • import csv

Een boel modules zijn standaard ook al geinstalleerd samen met de installatie van Python zelf, echter daarnaast zijn er via pip een grote lijst aan extra modules toe te voegen. Om dit soort modules te kunnen gebruiken, moet je eerst pip zelf installeren.

Via een terminal omgeving kun je pip installeren met de volgende regel:

sudo apt install python3-pip

Als pip succesvol geinstalleerd is, kun je modules toevoegen.

Om een kleine impressie te krijgen van wat er te installeren is aan extra modules kun je in de terminal invoeren:

pip3 list

Resticties kunnen er voor zorgen dat je niet op een normale manier modules kunt installeren. Hiervoor kun je de module als een script runnen, waardoor je als nog de module geinstalleerd krijgt.

sudo pip3 install <modulenaam>

Soms kan het zijn in verband met restricties op je computer dat het installeren van modules niet lukt. Mogelijk lukt het wel op de volgende manier:

sudo python3 -m pip install <modulenaam>

Nu dat pip geinstalleerd is, en je een module hebt geinstalleerd, kun je die op meerdere manieren toepassen in je script. Modules kunnen klein zijn, maar ook bijzonder groot. Dan is het beter voor de prestaties van het script om alleen een onderdeel van een module te gebruiken.

Om als voorbeeld te nemen het eerdere genoemde ‘os’ module. Je kunt de gehele module inladen:

import os
os.system("ls")

Als je maar één onderdeel nodig hebt van de ‘os’ module importeer je alleen dat wat je nodig hebt.

from os import system
system("ls")

In het genoemde voorbeeld kun je misschien de behoefte voelen om de module of het onderdeel van de module een aparte naam te willen geven. Dit is mogelijk en kan ook soms handig zijn om lange namen te vereenvoudigen.

from os import system as var
var("ls")

Bij het gebruiken van modules is het altijd raadzaam om de documentatie goed te lezen. Python is altijd hetzelfde echter een module niet altijd. Een website die in documentatie heeft over modules is pypi.org. Deze is echter wel in het engels.

Email verzenden met Python

In sommige scripts waarbij je informatie wilt delen met anderen is het handig om informatie te versturen via email. Daarom is het erg handig dat email verzenden met python met een eenvoudige script goed te doen is. Email verzenden met python heeft eigenlijk alleen een stukje script wat werkt nodig.

Daarom een stukje script wat prima zou moeten functioneren. Zoals je ziet moet je natuurlijk wel even wat essentiele informatie invoeren om het versturen van mail mogelijk te maken. Dit heeft te maken met de uitgaande mailserver van je email provider. Daarnaast heeft elk mailadres een wachtwoord.

    import email, ssl, smtplib
    onderwerp = "Het onderwerp van je mail"
    emailtekst = "Tekst wat je wilt hebben in de mail zelf"
    ontvanger_email = doel@mailadres.nl
    port = 465   #poort voor de uitgaande mailserver
    smtp_server = "smtp server van de mail provider"
    verstuur_email = "jou@mailadres.nl"
    wachtwoord = "het wachtwoord van de mail account"
    tekst = f'Subject: {onderwerp}\n\n{emailtekst}'

    context = ssl.create_default_context()
    with smtplib.SMTP_SSL(smtp_server, port, context=context) as server:
        server.login(verstuur_email, wachtwoord)
        server.sendmail(verstuur_email, ontvanger_email, tekst)

Foodplanner met random

Ook altijd problemen met te bedenken wat je de komende week moet eten? Met dit pythonscript hoef je daar dus niet meer over na te denken. De random module kiest voor jou uit wat je de komende dagen kunt gaan koken en eten.

Je kunt uiteraard ook het script iets aanpassen met opties die ook graag bij jou de revue mag passeren bij het avondeten.

import random
groente = ['Witte bonen in tomatensaus', 'bloemkool',
         'Brocolli', 'Witlof', 'Spruitjes', 'Snijbonen']
mexicaans = ['Wraps', 'Chili', 'Enchiladas']
vlees = ['Kip', 'Slavink', 'Worst', 'Gehaktballen', 'Stoofvlees']
broodje =['Touge met kip', 'Shoarma', 'Gehakt', 'Gyros', 'Pulled pork', 'Pulled chicken', 'Hamburgers']
soep = ['Chillisoep', 'Groentensoep', 'Tomatensoep']
makkelijk = ['Pizza', 'Patat', 'Pannenkoeken', 'Kapsalon']
stamppot1 = ['Stamppot Boerenkool', 'Stamppot Zuurkool', 'Stamppot Andijvie', 'Stamppot Snijbonen']
rijstt = ['Witte rijst', 'Nasi', 'Mihoen', 'Noedels', 'Bami']
rijst = ['Rendang', 'Kip met pindasaus', 'Kip Madras']
rijst_veg = ['gebakken groenten', 'soerengen boontjes', 'thempeh']
aardappelen = ['Gebakken aardappelen', 'Gekookte aardappelen',
               'Aardappelen puree']
broodsoort = ['Turks brood', 'Pita brood', 'Chiabatta', 'Stokbroodje']
italiaans = ['Lasagna', 'Spagetti', 'Macaroni', 'Penne']

italie = random.choice(italiaans)
italiaan = f"{italie}"

mexicaans2 = random.choice(mexicaans)
mex = f"{mexicaans2}"

soep2 = random.choice(soep)
soep3 = f"{soep2}"

groente1 = random.choice(groente)
vlees1 = random.choice(vlees)
aardappelen1 = random.choice(aardappelen)
groente8 = random.choice(groente)
vlees8 = random.choice(vlees)
aardappelen8 = random.choice(aardappelen)
hollands1 = f"{groente1} met {vlees1} en {aardappelen1}."
hollands8 = f"{groente8} met {vlees8} en {aardappelen8}."

rijst1 = random.choice(rijst)
rijst2 = random.choice(rijst_veg)
rijst3 = random.choice(rijstt)
chinees1 = f"{rijst3} met {rijst1} en {rijst2}."

stamp = random.choice(stamppot1)
vlees1 = random.choice(vlees)
stamppot = f"{stamp} met {vlees1}."

makkelijk1 = random.choice(makkelijk)
makkelijk2 = f"{makkelijk1}"

brood2 = random.choice(broodje)
broodsoort2 = random.choice(broodsoort)
brood = f"{broodsoort2} met {brood2}"

nou = [hollands1, soep3, hollands8, mex, chinees1, stamppot, makkelijk2, brood, italiaan]
random.shuffle(nou)

print('De makkelijke weekmenu:\n\n','- ', '\n -  '.join(nou), sep=" ")