Risolto Funzione def

mrcamarium

Utente Silver
7 Gennaio 2022
105
24
6
56
Ultima modifica:
ho realizzato uno script che è in grado di fare un analisi di una email allo scopo di estrapolare delle informazioni per verificare l'autenticità, questo script funziona ma ho bisogno di inserirlo sotto una definizione per richiamarlo da un menu
Python:
import re, email

#eml = input("Inserisci il percorso del file: ")
f = open("Re.eml", "r")# sostituire "Re.eml" con eml
msg = email.message_from_file(f)
f.close()
headers = email.message_from_string(msg.as_string())
infomail={
    "message-id":"",
    "spf-record":False,
    "dkim-record":False,
    "dmarc-record":False,
    "spoofed":False,
    "ip-address":"",
    "sender-client":"",
    "spoofed-mail":"",
    "dt":"",
    "content-type":"",
    "subject":""
}
for h in headers.items():
    #ID Messaggio
    if h[0].lower()=="message-id":
        infomail["message-id"]=h[1]
    #Server da dove è stata inviata l'email
    if h[0].lower()=="received":
        infomail["sender-client"]=h[1]
    #Autenticazione rilevata dal server di posta
    if h[0].lower()=="authentication-results":
        if(re.search("spf=pass",h[1])):
            infomail["spf-record"]=True;
        if(re.search("dkim=pass",h[1])):
            infomail["dkim-record"]=True
        if(re.search("dmarc=pass",h[1])):
            infomail["dmarc-record"]=True
        if(re.search("does not designate",h[1])):
            infomail["spoofed"]=True
        if(re.search(r"(\d{1,3}\.){3}\d{1,3}", h[1])):
            ip=re.search(r"(\d{1,3}\.){3}\d{1,3}", h[1])
            infomail["ip-address"]=str(ip.group())
    if h[0].lower()=="reply-to":
        infomail["spoofed-mail"]=h[1]
    if h[0].lower()=="date":
        infomail["dt"]=h[1]
    if h[0].lower()=="content-type":
        infomail["content-type"]=h[1]
    if h[0].lower()=="subject":
        infomail["subject"]=h[1]
print("\n=========================Risultato=========================\n")
print("[+] ID Messaggio: "+infomail["message-id"])
if(infomail["spf-record"]):
    print("[+] SPF Records: PASS")
else:
    print("[+] SPF Records: FAIL")
if(infomail["dkim-record"]):
    print("[+] DKIM: PASS")
else:
    print("[+] DKIM: FAIL")
if(infomail["dmarc-record"]):
    print("[+] DMARC: PASS")
else:
    print("[+] DMARC: FAIL")
if(infomail["spoofed"] and (not infomail["spf-record"]) and (not infomail["dkim-record"]) and (not infomail["dmarc-record"])):
    print("[+] L'E-mail è contraffatta")
    print("[+] E-mail: " + infomail["spoofed-mail"])
    print("[+] Indirizzo IP: " + infomail["ip-address"])
else:
    print("[+] L'E-mail è autentica")
    print("[+] IP-Address: " + infomail["ip-address"])
print("[+] Provider: " + infomail["sender-client"])
print("[+] Tipo di contenuto: " + infomail["content-type"])
print("[+] Data e Ora: " + infomail["dt"])
print("[+] Oggetto: " + infomail["subject"]+"\n\n")
quindi ho proceduto in questo modo:
Python:
import re, email

def mailinfo():
    #eml = input("Inserisci il percorso del file: ")
    f = open("Re.eml", "r")# sostituire "Re.eml" con eml
    msg = email.message_from_file(f)
    f.close()
    headers = email.message_from_string(msg.as_string())
    infomail={
        "message-id":"",
        "spf-record":False,
        "dkim-record":False,
        "dmarc-record":False,
        "spoofed":False,
        "ip-address":"",
        "sender-client":"",
        "spoofed-mail":"",
        "dt":"",
        "content-type":"",
        "subject":""
    }
    for h in headers.items():
        #ID Messaggio
        if h[0].lower()=="message-id":
            infomail["message-id"]=h[1]
        #Server da dove è stata inviata l'email
        if h[0].lower()=="received":
            infomail["sender-client"]=h[1]
        #Autenticazione rilevata dal server di posta
        if h[0].lower()=="authentication-results":
            if(re.search("spf=pass",h[1])):
                infomail["spf-record"]=True;
            if(re.search("dkim=pass",h[1])):
                infomail["dkim-record"]=True
            if(re.search("dmarc=pass",h[1])):
                infomail["dmarc-record"]=True
            if(re.search("does not designate",h[1])):
                infomail["spoofed"]=True
            if(re.search(r"(\d{1,3}\.){3}\d{1,3}", h[1])):
                ip=re.search(r"(\d{1,3}\.){3}\d{1,3}", h[1])
                infomail["ip-address"]=str(ip.group())
        if h[0].lower()=="reply-to":
            infomail["spoofed-mail"]=h[1]
        if h[0].lower()=="date":
            infomail["dt"]=h[1]
        if h[0].lower()=="content-type":
            infomail["content-type"]=h[1]
        if h[0].lower()=="subject":
            infomail["subject"]=h[1]
    print("\n=========================Risultato=========================\n")
    print("[+] ID Messaggio: "+infomail["message-id"])
    if(infomail["spf-record"]):
        print("[+] SPF Records: PASS")
    else:
        print("[+] SPF Records: FAIL")
    if(infomail["dkim-record"]):
        print("[+] DKIM: PASS")
    else:
        print("[+] DKIM: FAIL")
    if(infomail["dmarc-record"]):
        print("[+] DMARC: PASS")
    else:
        print("[+] DMARC: FAIL")
    if(infomail["spoofed"] and (not infomail["spf-record"]) and (not infomail["dkim-record"]) and (not infomail["dmarc-record"])):
        print("[+] L'E-mail è contraffatta")
        print("[+] E-mail: " + infomail["spoofed-mail"])
        print("[+] Indirizzo IP: " + infomail["ip-address"])
    else:
        print("[+] L'E-mail è autentica")
        print("[+] IP-Address: " + infomail["ip-address"])
    print("[+] Provider: " + infomail["sender-client"])
    print("[+] Tipo di contenuto: " + infomail["content-type"])
    print("[+] Data e Ora: " + infomail["dt"])
    print("[+] Oggetto: " + infomail["subject"]+"\n\n")
quando avvio il codice non parte nulla, non da alcun segno di vita.
Solo dopo mi sono reso conto che avevo dimenticato di chiudere con
mailinfo()