Je vais vous montrer comment traiter le résultat de l'exécution de Splunk en utilisant Python.
Utilisez la méthode suivante pour recevoir le résultat de l'exécution de Splunk sur Python.
python
splunk.Intersplunk.getOrganizedResults(input_str = None)
Cette méthode renvoie le résultat de l'instruction de recherche juste avant l'exécution sous la forme d'une liste de dictionnaires. Par exemple, dans le cas du résultat d'exécution indiqué dans la figure ci-dessous
Le formulaire retourné par la méthode est le suivant. Le nom du champ est la clé du dictionnaire.
python
[{'_time':'2017-09-01 05:05:14', 'MAC':'66:22:33:44:55:66'}
{'_time':'2017-09-01 05:13:16', 'MAC':'11:22:33:44:55:66'}
{'_time':'2017-09-01 05:13:19', 'MAC':'11:22:33:44:55:66'}]
Contrairement à ce qui précède, utilisez la méthode suivante pour transmettre des données de Python à Splunk.
python
splunk.Intersplunk.outputResults(results, messages = None, fields = None, mvdelim = '\n', outputfile = sys.stdout)
L'argument requis «résultats» est une liste de dictionnaires, tout comme les «résultats» renvoyés par «getOrganizedResults». Vous pouvez également écrire dans un fichier en spécifiant un objet fichier dans l'argument "outputfile".
A titre d'exemple d'utilisation, si le champ "MAC" du résultat reçu de Splunk est "11: 22: 33: 44: 55: 66", mettez "connu" dans le champ "décision", sinon mettez "inconnu". Ensuite, enregistrez le résultat dans un fichier CSV et créez une commande de recherche personnalisée pour l'afficher dans Splunk.
De plus, comment créer une commande de recherche personnalisée à l'aide de Python dans Splunk est présenté ci-dessous, donc si vous ne le connaissez pas, veuillez vous y référer. Comment créer une commande de recherche personnalisée (Splunk)
Utilisez le journal AP LAN sans fil suivant comme exemple de journal. (L'adresse MAC est répertoriée après STA.)
python
2017/09/01 09:13:51 LAN WLAN(STA_DEAUTH): STA(11:22:33:44:55:66) is deauthed!
2017/09/01 09:13:34 LAN WLAN(RSN_CONNECT): STA(11:22:33:44:55:66) is associated!
2017/09/01 09:04:29 LAN WLAN(STA_DEAUTH): STA(11:22:33:44:55:66) is deauthed!
2017/09/01 09:04:23 LAN WLAN(RSN_CONNECT): STA(11:22:33:44:55:66) is associated!
2017/09/01 08:34:09 LAN WLAN(STA_DEAUTH): STA(11:22:33:44:55:66) is deauthed!
2017/09/01 08:34:01 LAN WLAN(RSN_CONNECT): STA(11:22:33:44:55:66) is associated!
2017/09/01 08:03:48 LAN WLAN(STA_DEAUTH): STA(11:22:33:44:55:66) is deauthed!
2017/09/01 08:03:42 LAN WLAN(RSN_CONNECT): STA(11:22:33:44:55:66) is associated!
2017/09/01 07:36:51 LAN WLAN(STA_DEAUTH): STA(33:22:33:44:55:66) is deauthed!
2017/09/01 07:36:35 LAN WLAN(RSN_CONNECT): STA(33:22:33:44:55:66) is associated!
2017/09/01 07:34:18 LAN WLAN(STA_DEAUTH): STA(11:22:33:44:55:66) is deauthed!
2017/09/01 07:34:10 LAN WLAN(RSN_CONNECT): STA(11:22:33:44:55:66) is associated!
Le code Python ressemble à ceci:
check_mac_address.py
import splunk.Intersplunk
#Recevoir les résultats de la recherche Splunk
results, dummyresults, settings = splunk.Intersplunk.getOrganizedResults()
#Jugez en regardant l'adresse MAC
for result in results:
if result['MAC'] == '11:22:33:44:55:66':
result['decision'] = 'known'
else:
result['decision'] = 'unknown'
#Enregistrez le résultat du traitement sous forme de fichier CSV
splunk.Intersplunk.outputResults(results, outputfile = open("result.csv","w"))
#Afficher le résultat du traitement sur Splunk
splunk.Intersplunk.outputResults(results)
Dans l'instruction de recherche suivante, transmettez le résultat du traitement de Splunk à la recherche personnalisée créée.
python
index=ap_idx
|rex field=_raw "STA\((?<MAC>.*)\)"
|table _time MAC
|run check_mac_address
Il sera affiché sur Splunk comme indiqué ci-dessous, et le résultat sera enregistré sous "result.csv" dans le même répertoire que le script.