Kommunikationsverarbeitung durch Python Dieser Artikel ist der 21. Tagesartikel des Adventskalenders 2015 der Keio University SFC Murai & Tokuda Lab.
Bis zum Sommer fing ich ab dem Herbstsemester an, den PC zu berühren, weil ich angewidert war, über Forschungsbedeutung und -dienste zu sprechen, ohne ihn auf der Ebene "UNIX-Befehl" zu implementieren. Dann fing ich an, Swift, Python zu berühren und jetzt schreibe ich Python.
Immerhin bin ich neu in der Programmierung. Dieses Mal werde ich über Socket-Kommunikation in Python schreiben.
Richten Sie einen TCP-Server nur mit Python ein und führen Sie eine Socket-Kommunikation mit einem TCP-Client durch.
Da es einige Unterschiede in der Handhabung von Datentypen zwischen Python2- und 3-Serien gibt, habe ich eine Korrektur hinzugefügt. (Auch print () und input ())
Grundsätzlich werden wir die Schritte mit der Socket-Bibliothek ausführen. Lassen Sie uns zunächst einen TCP-Client erstellen.
client.py (Python2-Serie)
# -*- coding:utf-8 -*-
import socket
host = "xxx.xxx.xxx.xxx" #Geben Sie den Hostnamen Ihres Servers ein
port = xxxx #Ich werde einen geeigneten PORT angeben
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #Erstellen Sie ein Objekt
client.connect((host, port)) #Stellen Sie nun eine Verbindung zum Server her
client.send("from nadechin") #Senden Sie die entsprechenden Daten (wie der Empfänger weiß)
response = client.recv(4096) #Empfangen sollte eine angemessene Potenz von 2 sein (nicht zu groß)
print response
client.py (Python3-Serie)
# -*- coding:utf-8 -*-
import socket
host = "xxx.xxx.xxx.xxx" #Geben Sie den Hostnamen Ihres Servers ein
port = xxxx #Ich werde einen geeigneten PORT angeben
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #Erstellen Sie ein Objekt
client.connect((host, port)) #Stellen Sie nun eine Verbindung zum Server her
massage = "from nadechin"
client.send(massage.encode('utf-8')) #Senden Sie die entsprechenden Daten (wie der Empfänger weiß)
response = client.recv(4096) #Empfangen sollte eine angemessene Potenz von 2 sein (nicht zu groß)
print(response)
Es ist die Basis für Server und Clients, die Python verwenden, und kann durch Erweiterung weit verbreitet werden. UDP-Clients können auf die gleiche Weise erstellt werden. (Für die UDP-Kommunikation muss connect () nicht aufgerufen werden.)
Als Nächstes erstellen wir einen TCP-Server. Selbstverständlich wird dies ebenso wie das TCP-Client-Formular geschrieben.
server.py (Python2-Serie)
# -*- coding:utf-8 -*-
import socket
host = "xxx.xxx.xxx.xxx" #Geben Sie den Hostnamen Ihres Servers ein
port = xxxx #Ich werde den gleichen PORT-Satz auf dem Client angeben
serversock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
serversock.bind((host,port)) #Binden Sie durch Angabe von IP und PORT
serversock.listen(10) #Warten Sie auf eine Verbindung (geben Sie die maximale Anzahl von Warteschlangen an).
print 'Waiting for connections...'
clientsock, client_address = serversock.accept() #Speichern Sie Daten, wenn eine Verbindung besteht
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) #Gibt eine Nachricht zurück
clientsock.close()
server.py (Python3-Serie)
# -*- coding:utf-8 -*-
import socket
host = "xxx.xxx.xxx.xxx" #Geben Sie den Hostnamen Ihres Servers ein
port = xxxx #Ich werde den gleichen PORT-Satz auf dem Client angeben
serversock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
serversock.bind((host,port)) #Binden Sie durch Angabe von IP und PORT
serversock.listen(10) #Warten Sie auf eine Verbindung (geben Sie die maximale Anzahl von Warteschlangen an).
print('Waiting for connections...')
clientsock, client_address = serversock.accept() #Speichern Sie Daten, wenn eine Verbindung besteht
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) #Gibt eine Nachricht zurück
clientsock.close()
1
Serverseite (CentOS)
$ python server.py
Waiting for connections...
2
Client-Seite (MacBook)
$ python client.py
3
Serverseite (CentOS)
$ python server.py
Waiting for connections...
Received -> from nadechin
Type message...
Hello World!
4
Client-Seite (MacBook)
$ python client.py
Hello World!
5
Serverseite (CentOS)
$ python server.py
Waiting for connections...
Received -> from nadechin
Type message...
Hello World!
Wait...
Received ->
Sie können sich so ein wenig unterhalten. Wenn Sie die Methode ändern, können Sie auf unbestimmte Zeit austauschen, oder wenn Sie das Akzeptieren der Nachricht ignorieren, können Sie das Recht behalten, auch nach dem Sprechen zu sprechen.
Es war eine Ankündigung, die sich wie ein kleiner Fisch anfühlt, aber danke, dass Sie mir die Gelegenheit gegeben haben, an einem solchen Ort zu schreiben. In Zukunft möchte ich nach und nach die Sprache C lernen und mein Verständnis des Netzwerks vertiefen.
Ich habe Socket-Programmierung in C-Sprache durchgeführt und bestätigt, dass ich es tatsächlich tun kann. In letzter Zeit habe ich viele Dinge gegessen, aber ich fange an, mich für Honeypot und Systemprogrammierung zu interessieren, also werde ich wieder schreiben, wenn jedes Ergebnis herauskommt.
Justin Seitz (2014) "Cyber-Sicherheitsprogrammierung" Kazushi Aoki, Yu Arai, Saya Ichinose, Makoto Iwamura, Yuhei Kawakotani, Yuji Hoshizawa
Recommended Posts