Traitement de la communication par Python Cet article est l'article du 21ème jour du Calendrier de l'Avent 2015 du SFC Murai & Tokuda Lab de l'Université Keio.
Jusqu'à l'été, j'ai commencé à toucher le PC à partir du semestre d'automne car j'étais dégoûté de parler de l'importance de la recherche et des services sans l'implémenter au niveau de «qu'est-ce qu'une commande UNIX». Ensuite, j'ai commencé à toucher Swift et Python et maintenant j'écris Python.
Après tout, je suis nouveau dans la programmation. Cette fois, j'écrirai sur la communication socket en Python.
Configurez un serveur TCP en utilisant uniquement Python et effectuez une communication socket avec un client TCP.
Puisqu'il existe des différences dans la gestion des types de données entre les séries python2 et 3, j'ai ajouté une correction pour cela. (Aussi print () et input ())
En gros, nous suivrons les étapes en utilisant la bibliothèque de sockets. Commençons par créer un client TCP.
client.py (série Python2)
# -*- coding:utf-8 -*-
import socket
host = "xxx.xxx.xxx.xxx" #Entrez le nom d'hôte de votre serveur
port = xxxx #Je vais spécifier un PORT approprié
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #Créer un objet
client.connect((host, port)) #Connectez-vous maintenant au serveur
client.send("from nadechin") #Envoyez les données appropriées (comme le sait le destinataire)
response = client.recv(4096) #La réception doit être une puissance appropriée de 2 (pas trop grande)
print response
client.py (série Python3)
# -*- coding:utf-8 -*-
import socket
host = "xxx.xxx.xxx.xxx" #Entrez le nom d'hôte de votre serveur
port = xxxx #Je vais spécifier un PORT approprié
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #Créer un objet
client.connect((host, port)) #Connectez-vous maintenant au serveur
massage = "from nadechin"
client.send(massage.encode('utf-8')) #Envoyez les données appropriées (comme le sait le destinataire)
response = client.recv(4096) #La réception doit être une puissance appropriée de 2 (pas trop grande)
print(response)
C'est la base des serveurs et des clients qui utilisent Python, et il peut être largement appliqué en l'étendant. Les clients UDP peuvent être créés à peu près de la même manière. (Il n'est pas nécessaire d'appeler connect () pour la communication UDP)
Ensuite, créons un serveur TCP. Bien entendu, ceci est également écrit de la même manière que le formulaire client TCP.
server.py (série Python2)
# -*- coding:utf-8 -*-
import socket
host = "xxx.xxx.xxx.xxx" #Entrez le nom d'hôte de votre serveur
port = xxxx #Je vais spécifier le même port défini sur le client
serversock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
serversock.bind((host,port)) #Lier en spécifiant IP et PORT
serversock.listen(10) #Écouter une connexion (spécifier le nombre maximum de files d'attente)
print 'Waiting for connections...'
clientsock, client_address = serversock.accept() #Stocker les données une fois connecté
while True:
rcvmsg = clientsock.recv(1024)
print 'Received -> %s' % (rcvmsg)
if rcvmsg == '':
break
print 'Type message...'
s_msg = raw_input()
if s_msg == '':
break
print 'Wait...'
clientsock.sendall(s_msg) #Renvoie un message
clientsock.close()
server.py (série Python3)
# -*- coding:utf-8 -*-
import socket
host = "xxx.xxx.xxx.xxx" #Entrez le nom d'hôte de votre serveur
port = xxxx #Je vais spécifier le même port défini sur le client
serversock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
serversock.bind((host,port)) #Lier en spécifiant IP et PORT
serversock.listen(10) #Écouter une connexion (spécifier le nombre maximum de files d'attente)
print('Waiting for connections...')
clientsock, client_address = serversock.accept() #Stocker les données une fois connecté
while True:
rcvmsg = clientsock.recv(1024)
print('Received -> %s' % (rcvmsg))
if rcvmsg == '':
break
print('Type message...')
s_msg = input().replace('b', '').encode('utf-8')
if s_msg == '':
break
print('Wait...')
clientsock.sendall(s_msg) #Renvoie un message
clientsock.close()
1
Côté serveur (CentOS)
$ python server.py
Waiting for connections...
2
Côté client (MacBook)
$ python client.py
3
Côté serveur (CentOS)
$ python server.py
Waiting for connections...
Received -> from nadechin
Type message...
Hello World!
4
Côté client (MacBook)
$ python client.py
Hello World!
5
Côté serveur (CentOS)
$ python server.py
Waiting for connections...
Received -> from nadechin
Type message...
Hello World!
Wait...
Received ->
Vous pouvez avoir une petite conversation comme celle-ci. Si vous changez de méthode, vous pouvez échanger indéfiniment, ou si vous ignorez l'acceptation du message, vous pouvez garder le droit de parler même après avoir parlé.
C'était une annonce qui ressemble à un petit poisson, mais merci de me donner l'opportunité d'écrire dans un tel endroit. A l'avenir, j'aimerais apprendre le langage C petit à petit et approfondir ma compréhension du réseau.
J'ai fait de la programmation socket en langage C et j'ai confirmé que je pouvais le faire. Récemment, j'ai mangé beaucoup de choses, mais je commence à m'intéresser à Honeypot et à la programmation système, alors j'écrirai à nouveau lorsque chaque résultat sortira.
Justin Seitz (2014) "Programmation de cybersécurité" Kazushi Aoki, Yu Arai, Saya Ichinose, Makoto Iwamura, Yuhei Kawakotani, Yuji Hoshizawa
Recommended Posts