J'ai essayé de communiquer avec un serveur distant par communication Socket avec Python.

ss.png

Objectif

--Échanger des données avec un serveur VPS distant avec Python

Il y a de nombreuses parties non sécurisées en raison de la nature de ce que nous faisons, donc ce n'est que pour les tests et les loisirs.

environnement

Du côté serveur

Préparez le serveur. Dans mon exemple, j'ai emprunté le VPS de Sakura.

Environnement

(Remarque) Précautions lors de l'utilisation du VPS de Sakura

Ajoutez des paramètres de filtrage de paquets à partir du panneau de commande. Vous pouvez le désactiver, mais ce n'est pas recommandé car ce n'est pas bon pour la sécurité.

sakura01.png

Dans cet exemple, je voulais utiliser le numéro de port «50000», donc je l'ai désactivé temporairement.

image.png

Paramètres du port

Réglez si nécessaire. Cet exemple est l'exemple de réglage VPS de Sakura. Modifiez également le numéro de port à votre convenance.

$ firewall-cmd --zone=public --add-port=50000/tcp --permanent

N'oubliez pas de refléter les paramètres!

$ firewall-cmd --reload

Installer php

Dans cet exemple, php7.3 est installé.

remi

$ yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

Il contient beaucoup de choses supplémentaires, mais veuillez les modifier si nécessaire.

$ yum -y install --enablerepo=remi,remi-php73 php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql

Construire un serveur socket en utilisant PHP-WebSocket

Dans cet exemple, la bibliothèque externe PHP-WebSocket est utilisée.

Déposez binaires ici dans votre répertoire Apache.

$ cd /var/www/html
$ wget https://github.com/nicokaiser/php-websocket/archive/php-websocket.zip
$ unzip php-websocket.zip
$ sudo rm -rf php-websocket.zip

Après le téléchargement, éditez server.php dans php-websocket / server. Si vim n'est pas installé, utilisez vi ou installez-le avec yum -y install vim.

$ cd php-websocket/server
$ vim server.php

Modifiez et enregistrez `` '' et 50000 (port) selon le cas.

<?php

error_reporting(0);

require(__DIR__ . '/lib/SplClassLoader.php');

$classLoader = new SplClassLoader('WebSocket', __DIR__ . '/lib');
$classLoader->register();

$server = new \WebSocket\Server('<Adresse IPv4 globale>', 50000);
$server->registerApplication('echo', \WebSocket\Application\EchoApplication::getInstance());
$server->registerApplication('time', \WebSocket\Application\TimeApplication::getInstance());
$server->run();

Réécrivez ensuite la fonction de prise de contact dans php-websocket / lib / WebSocket / Connection.php. Réécrivez la fonction «handshake» sur la ligne «28» comme suit.

private function handshake($data)
{
    socket_write($this->socket, $data, strlen($data));
    $this->application->onConnect($this);
    return true;
}

Démarrer le serveur WebSocket

Commencez par la commande suivante.

$ php server.php

Lorsque cela se produit, le démarrage du serveur est terminé. Passez au client.

[root@~]# php server.php 
2020-09-14 14:02:13 [info] Server created

Côté client (Python)

Code côté client qui envoie des données.

--Remplacer `` '' -- 50000 est un port

import socket

if __name__ == '__main__':
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
        sock.connect(('<Adresse IPv4 globale>', 50000))
        data = 'Hello From Python Client!'
        sock.send(data.encode())
        print(sock.recv(1024).decode())

Essayez de frapper

Si les données transmises sont renvoyées en écho, cela réussit. C'est un peu poussé, mais j'ai pu le faire pour le moment.

ss.png

[root@myserver]# php server.php 
2020-09-14 15:00:53 [info] Server created
2020-09-14 15:00:55 [info] [client XXX] Connected

en conclusion

C'était étonnamment gênant. .. Merci pour votre visite.

Recommended Posts

J'ai essayé de communiquer avec un serveur distant par communication Socket avec Python.
J'ai créé un serveur avec socket Python et ssl et j'ai essayé d'y accéder depuis le navigateur
J'ai essayé la communication SMTP avec Python
J'ai essayé un langage fonctionnel avec Python
[5e] J'ai essayé de créer un certain outil de type Authenticator avec python
[2nd] J'ai essayé de créer un certain outil de type Authenticator avec python
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
J'ai essayé de créer une liste de nombres premiers avec python
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai essayé de créer une application de notification de publication à 2 canaux avec Python
J'ai essayé de créer une application todo en utilisant une bouteille avec python
[4th] J'ai essayé de créer un certain outil de type Authenticator avec python
[1er] J'ai essayé de créer un certain outil de type Authenticator avec python
Communication de socket avec Python
J'ai essayé de créer un programme qui convertit les nombres hexadécimaux en nombres décimaux avec python
Je veux faire un jeu avec Python
J'ai essayé d'obtenir des données CloudWatch avec Python
J'ai essayé de sortir LLVM IR avec Python
J'ai essayé de faire un signal avec Raspeye 4 (édition Python)
J'ai essayé d'automatiser la fabrication des sushis avec python
[Outlook] J'ai essayé de créer automatiquement un e-mail de rapport quotidien avec Python
J'ai essayé de créer un environnement de développement Mac Python avec pythonz + direnv
Je veux écrire dans un fichier avec Python
J'ai essayé de faire un processus périodique avec CentOS7, Selenium, Python et Chrome
J'ai fait une application d'envoi de courrier simple avec tkinter de Python
[Analyse des brevets] J'ai essayé de créer une carte des brevets avec Python sans dépenser d'argent
Quand j'ai essayé de créer un environnement virtuel avec Python, cela n'a pas fonctionné
Lorsque je me suis connecté à un serveur Jupyter distant avec VScode, il était distant mais local.
J'ai essayé de créer facilement un système de présence entièrement automatique avec Selenium + Python
Une histoire à laquelle j'étais accro après la communication SFTP avec python
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
J'ai essayé de démarrer avec le script python de blender_Part 01
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé d'implémenter un pseudo pachislot en Python
J'ai essayé de démarrer avec le script python de blender_Partie 02
J'ai essayé d'implémenter le perceptron artificiel avec python
Je veux travailler avec un robot en python.
[Python] J'ai essayé d'exécuter un serveur local en utilisant flask
J'ai essayé de résoudre le problème avec Python Vol.1
Je veux faire fonctionner un ordinateur quantique avec Python
J'ai essayé de résoudre la théorie des nombres entiers d'AOJ avec Python
J'ai essayé fp-growth avec python
J'ai essayé gRPC avec Python
J'ai essayé de gratter avec du python
J'ai essayé d'extraire diverses informations du PC distant de Python par la bibliothèque WMI
Quand j'ai essayé de faire une communication socket avec Raspberry Pi, le protocole était différent
[Mac] Je souhaite créer un serveur HTTP simple qui exécute CGI avec Python
J'ai essayé de générer automatiquement la chaîne de caractères à entrer dans M. Adjustment avec Python
[Python] J'ai essayé de créer automatiquement un rapport quotidien de YWT avec la messagerie Outlook
J'ai essayé d'agréger et de comparer les données de prix unitaires par langue avec Real Gachi by Python
J'ai essayé de créer un cadre de données pandas en grattant les informations de rappel d'aliments avec Python
J'ai essayé d'implémenter une ligne moyenne mobile de volume avec Quantx