Partage de technologie

programmation réseau python-TCP/IP

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

couche de liaison

Composition du cadre (dans l'ordre) :

MAC cible : 6B

MAC source : 6B

Type : 2B

Données : 46B-1500B

CRC : 4B

Parmi eux, le MAC source est l'adresse de la carte réseau hôte, le type est le type de données de la couche réseau source, ipv4 est 0800, arp est 0806, pppoe est 8864, 1qtag est 8100, ipv6 est 86dd.

Python peut obtenir l'adresse Mac native via le module uuid

Couche réseau

Structure du datagramme

En-tête : 20-60B, dont les 20 premiers B sont obligatoires et les 40 derniers sont facultatifs.

Données : 0-65516B

structure d'en-tête

Version : 4 chiffres, indiquant ipv4 ou ipv6

ihl : 4 bits, indiquant la longueur de l'en-tête, l'unité est 4B, donc le maximum est 4x15=60B, ce qui est exactement la longueur maximale de l'en-tête

ds : services différenciés, 8 bits, les trois premiers bits indiquent la priorité, les quatre bits suivants indiquent le délai minimum, le débit maximum, la fiabilité la plus élevée et le coût minimum, le dernier bit est inutilisé

Longueur totale : 16 bits, indiquant la longueur totale de l'en-tête et des données, en B.Notez que la longueur des données de la couche liaison est de 46 à 1 500. Lorsque le datagramme de la couche réseau est inférieur à 46 B, les données seront remplies. Lorsqu'elles dépassent 1 500, elles seront découpées.

Identification : 16 bits, indiquant l'identifiant unique des données fragmentées

Flag : 3 bits, le bit le plus élevé est un bit réservé, le deuxième bit indique s'il peut être fragmenté, 0 signifie qu'il peut être fragmenté, 1 signifie qu'il ne peut pas être fragmenté, le dernier bit indique si le datagramme est fragmenté, 0 signifie non. fragmenté, Et c'est le dernier fragment, 1 signifie fragment, et il y a des fragments après

Déplacement des fragments : 13 bits, 8B

Durée de vie, 8 bits, maximum 255, indiquant le nombre maximum de sauts dans la route

Protocole : 8 bits, indiquant le type de datagramme IP, tel que ICMP, IGMP, TCP, UDP, etc.

Somme de contrôle d'en-tête : 16 bits

Adresse IP source et adresse IP de destination, 32 bits chacune

Python peut obtenir des informations réseau via les deux modules psutil et netifaces. La version netifaces est obsolète. Vous pouvez installer netifacce2.

couche de transport

udp

L'accessibilité des données n'est pas garantie

En-tête 8B : port source 2B, port de destination 2B, longueur 2B, somme de contrôle 2B

Données 0-65527B

TCP

Poignée de main à 3 voies pour créer une connexion, poignée de main à 4 voies pour fermer la connexion

Structure du datagramme

Première partie 20-60B

Données 0-65535B

structure d'en-tête

Port source 16 bits

Port de destination 16 bits

Numéro de série : 32 bits : Chaque octet de données possède un numéro de séquence,Après avoir atteint pow(2,32), cela commence à 0

Numéro de confirmation : 32 bits. Le destinataire envoie le numéro de séquence du premier octet du prochain message de données à l'expéditeur. Par exemple, si l'expéditeur envoie 0 à 999 octets, le numéro de confirmation envoyé par le destinataire est 1000.

Décalage des données : 4 bits, bit unitaire 4B, similaire à l'ihl de l'en-tête ipv4

Réservé : 6 bits, généralement 0

URG : 1 bit, 1 indique des données urgentes, le pointeur urgent est valide

ACK : 1 bit, 1 signifie que le champ du numéro de confirmation est valide

PSH : 1 bit, 1 signifie que le message est créé et envoyé immédiatement. Le destinataire le remettra immédiatement au processus après l'avoir reçu, au lieu de le mettre dans le cache et d'attendre que le cache soit plein avant de le soumettre.

RST : 1 bit. S'il vaut 1, cela signifie qu'il y a un problème sérieux avec la connexion actuelle. Xu Ao libérera la connexion et recréera la connexion. RST de 1 peut également être utilisé pour refuser d'accepter des messages illégaux ou. refuser d'ouvrir des connexions illégales.

SYN : 1 bit, 1 indique que le message est un message de demande de connexion ou d'acceptation de connexion

FIN : 1 bit, 1 indique que les données ont été envoyées et que la connexion doit être libérée.

Fenêtre : 16 bits, envoyés par le destinataire à l'expéditeur, indiquant la longueur du prochain message censé être accepté

Somme de contrôle : 16 bits

Pointeur urgent : 16 bits Lorsque URG vaut 1, il indique la position finale des données urgentes.

Python obtient des informations sur le réseau

psutil peut obtenir certaines statistiques réseau. La méthode net_io_counters collecte par défaut les statistiques réseau de l'ensemble de la machine. La saisie du paramètre pernic=True collectera les statistiques de chaque carte réseau séparément.

Couche d'application

http

HTTP est une communication sans état par défaut et les services avec état peuvent être exécutés via des cookies.

Le port http est généralement 80

Structure des messages

Message de requête : méthode, URL, version, autres champs d'en-tête, entité du message (facultatif)

Message de réponse : version, code d'état, phrase, autres champs d'en-tête, entité du message (facultatif)

Méthodes : Il existe 8 types, get, post, head, put, delete, option, connect, trace

Version : numéro de version http

Autres champs d'en-tête : tels que Cache-Control, Accept-Encoding, etc.

Entité du message : aucune limite de longueur, peut être 0

Code d'état : 404, trois chiffres.1xx indique que le serveur a reçu la demande, 2xx indique que le serveur accepte la demande du client, 3xx indique que le serveur redirige la demande du client, 4xx indique que la demande du client est incorrecte et 5xx indique qu'il y a un problème avec le serveur. .

Phrase : commentez le code d'état. Par exemple, la phrase correspondant au code retour 202 est Accepter et la phrase correspondante au code retour 404 est Not Fount.

https

http n'a aucune garantie de sécurité et peut être capturé. https utilise SSL ou TLS pour crypter les paquets de données, puis les transmet via TCP.443

Le chiffrement symétrique et le chiffrement asymétrique sont généralement utilisés pour le chiffrement des messages, et le chiffrement asymétrique est généralement utilisé pour le chiffrement des mots de passe.

Processus de demande

Lorsque le client le demande, il enverra au serveur un ensemble de règles de chiffrement qu'il prend en charge.

Le serveur combine un ensemble d'algorithmes de chiffrement et de hachage basés sur les règles de chiffrement du client et le renvoie au client sous la forme d'un certificat numérique accompagné de ses propres informations d'identité.

Le client vérifie la validité du certificat du serveur, génère une chaîne de mots de passe aléatoires après avoir transmis le certificat et crypte le mot de passe aléatoire avec la clé publique du serveur.Le client calcule le hachage du message à envoyer, crypte le message à envoyer et la valeur de hachage du message avec un mot de passe à nombre aléatoire, et enfin crypte la clé publique du serveur avec un mot de passe à nombre aléatoire, et le message et le message sont cryptés. avec le mot de passe aléatoire sont hachés ensemble et renvoyés au serveur.

Après avoir reçu les données client, le serveur utilise sa propre clé privée pour déchiffrer le mot de passe à nombre aléatoire, puis utilise le mot de passe à nombre aléatoire pour déchiffrer le message et la valeur de hachage du message, et compare la valeur de hachage déchiffrée avec la valeur de hachage du message reçu pour voir si c'est cohérent. S'ils sont cohérents, la connexion entre le client et le serveur est établie avec succès. Après cela, les deux parties utilisent des mots de passe aléatoires pour crypter et déchiffrer les données.Lors de la transmission ultérieure des données, si une erreur se produit ou si le hachage est incohérent, la connexion sera automatiquement interrompue.

ftp

DNS

SNMP

Le protocole SNMP Simple Mail Transfer Protocol est utilisé pour transférer les e-mails de l'adresse source vers l'adresse de destination. Le port est généralement 25.

Il s'agit d'un protocole d'envoi d'e-mails couramment utilisé. Après l'envoi d'un e-mail, l'e-mail sera envoyé au serveur SNMP.

pop3

Le destinataire est utilisé pour accepter les e-mails qui lui sont envoyés par d'autres utilisateurs depuis son propre serveur. Le port est généralement 110.

pop3 est un protocole hors ligne. Lorsque l'utilisateur se connecte, les mails du serveur pop3 seront téléchargés vers la zone locale en même temps, et en même temps, les mails du serveur seront automatiquement supprimés.

imap est un protocole de réception de courrier en ligne, qui compense le problème hors ligne de pop3. Il s'agit actuellement du protocole de réception de courrier le plus couramment utilisé. Le port est généralement 143.

DHCP

Lorsqu'un client avec DHCP se connecte au réseau, il diffusera un message de découverte DHCP. Après un nombre limité de diffusions selon certaines règles, si aucune réponse n'est reçue, DHCP échouera.

Après avoir reçu le message, le serveur choisira une adresse IP dans le pool d'adresses disponible, enverra un message d'offre DHCP sous forme de diffusion et renverra l'adresse IP au client.

Une fois que le client a reçu l'adresse IP attribuée par le serveur DHCP, il enverra une requête arp pour voir si l'adresse IP est occupée, le client enverra un rapport de refus DHCP au serveur DHCP. il enverra une requête DHCP au serveur. Après l'avoir reçue, le serveur enverra une réponse DHCP ack au client. À ce stade, le processus du service DHCP se termine.

Le port du serveur DHCP est généralement 67 et le port du client DHCP est généralement 68. DHCP utilise la communication UDP.