Enviar e receber pacotes UDP via Python

Enviar e receber pacotes UDP via Python
Já sabemos sobre dois protocolos principais da camada de transporte, como TCP e UDP. Para mais informações sobre TCP e UDP, você pode verificar a seção de referência. Neste artigo, aprenderemos a enviar e receber pacotes UDP usando o programa Python.

Expectativas:

Aqui estão alguns pontos -chave que podem ser aprendidos neste artigo

  1. Enviando algum texto usando o programa Python, que usa o protocolo UDP.
  2. Recebendo algum texto usando o programa Python que usa o protocolo UDP.
  3. Verifique o pacote UDP no Wireshark.
  4. Aprenda sobre o código Python para enviar e receber pacotes UDP.

Diagrama de configuração geral:

O sistema A e B devem ser capazes de fazer ping um no outro.

Suposições ou limitações:

  1. Ambos os sistemas devem ter Linux com o Ubuntu. O código pode ou não funcionar em outro sistema operacional como Windows10, Mac etc.
  2. Ambos os sistemas devem ter Python versão 3. Este código pode ou não funcionar no Python 2.7 versão.

NOTA: Você pode verificar a referência para experimentar enviar e receber pacotes UDP via Linux CLI antes de optar por arquivos python para realizar a mesma tarefa.

Arquivos Python:

Existem dois arquivos python servidor.py e cliente.py. O arquivo de servidor e o arquivo do cliente devem estar presentes no sistema de servidor e no cliente, respectivamente.

Servidor.py

soquete de importação
Importar sistemas
Se Len (SYS.argv) == 3:
# Obtenha "endereço IP do servidor" e também o "número da porta" do argumento 1 e do argumento 2
IP = sys.argv [1]
porta = int (sys.argv [2])
outro:
Print ("Run como: servidor python3.py ")
saída (1)
# Crie um soquete UDP
s = soquete.soquete (soquete.Af_inet, soquete.Sock_dgram)
# Ligue o soquete à porta
server_address = (IP, porta)
s.bind (server_address)
print ("do Ctrl+C para sair do programa !!")
enquanto é verdade:
Print ("###### Servidor está ouvindo ######")
dados, endereço = s.RecvFrom (4096)
print ("\ n \ n 2. Servidor recebido: ", dados.decode ('utf-8'), "\ n \ n")
send_data = input ("Digite algum texto para enviar =>")
s.sendto (send_data.Encode ('UTF-8'), endereço)
print ("\ n \ n 1. Servidor enviado: ", send_data," \ n \ n ")

Cliente.py

soquete de importação
Importar sistemas
Se Len (SYS.argv) == 3:
# Obtenha "endereço IP do servidor" e também o "número da porta" do argumento 1 e do argumento 2
IP = sys.argv [1]
porta = int (sys.argv [2])
outro:
Print ("Run Like: Python3 Client.py ")
saída (1)
# Crie soquete para servidor
s = soquete.soquete (soquete.Af_inet, soquete.Sock_dgram, 0)
print ("do Ctrl+C para sair do programa !!")
# Vamos enviar dados através do protocolo UDP
enquanto é verdade:
send_data = entrada ("Digite algum texto para enviar =>");
s.sendto (send_data.Encode ('UTF-8'), (IP, porta))
print ("\ n \ n 1. Cliente enviado: ", send_data," \ n \ n ")
dados, endereço = s.RecvFrom (4096)
print ("\ n \ n 2. Cliente recebeu: ", dados.decode ('utf-8'), "\ n \ n")
# feche o soquete
s.fechar()

Enviar/receber pacote UDP:

Vamos dar um exemplo como enviaremos o pacote UDP do sistema A para o sistema B. Portanto, no conceito de servidor-cliente, temos que executar o servidor no lado B e cliente no sistema A lado.

Também temos endereços IP válidos.

Sistema A IP: 192.168.1.6
Sistema B IP: 192.168.1.102

Agora, diferentemente dos pacotes UDP de envio e recebimento via Linux CLI, vamos executar servidor.py No sistema, B [192.168.1.102] e então vamos correr cliente.py No sistema A [192.168.1.6].

Como executar o servidor.PY em 192.168.1.102?

Aqui está o comando para executar o servidor.py

Servidor $ python3.PY 192.168.1.102 4444

Aqui está a captura de tela

Aqui existem dois argumentos para o programa Python. 1st argumento é o endereço IP do próprio servidor, aqui seus 192.168.1.102 e 2nd Argumento é port qual servidor estará ouvindo, aqui escolhemos 4444.

Como administrar o cliente.PY em 192.168.1.6?

Aqui está o comando para executar o cliente.py

$ python3 cliente.PY 192.168.1.102 4444

Aqui está a captura de tela

Aqui existem dois argumentos para o programa Python. 1st Argumento é o endereço IP do servidor, aqui seus 192.168.1.102 e 2nd argumento é porto onde o servidor está em execução. Para o nosso exemplo, é 4444.

Envie ou receba algum texto:

Agora, como você pode ver, estamos prontos para nos comunicar entre dois sistemas. Mas precisamos começar do cliente primeiro. Vamos digitar algo no cliente e ver se atinge o servidor ou não.

Envie dados do cliente: “Eu sou do cliente”

Screenshot Form Form Client:

Agora essa mensagem do cliente deve vir ao servidor. Aqui está a captura de tela do servidor.

Agora podemos ver no lado do servidor também temos opção de enviar algo para o cliente. Vamos tentar isso.

Envie dados do cliente: “Eu sou do servidor”

Captura de tela do servidor:

E aqui está a captura de tela no lado do cliente.

Agora isso continuará em tempos infinitos até pararmos o programa Python usando Ctrl+C.

Verifique o pacote UDP no Wireshark:

Agora fizemos alguma comunicação, mas como sabemos que o UDP foi usado para enviar ou receber esses pacotes. Então, podemos verificar a captura no Wireshark.

Vamos ver o pacote quando o cliente [192.168.1.6] Enviado dados [“Eu sou do cliente”] para servidor [192.168.1.6].

Explicação de código:

Para explicação básica de código python, consulte “Transferência de arquivo de soquete Python.

Explicaremos apenas códigos de linhas importantes para o arquivo python cliente e servidor. Existem comentários úteis dentro do código do cliente e do servidor.

Explicação do código do cliente:

Se Len (SYS.argv) == 3:

A linha acima é necessária para verificar se o usuário passou os argumentos obrigatórios necessários. Ou o programa vai sair. O mesmo cheque existe no programa de servidor.

s = soquete.soquete (soquete.Af_inet, soquete.Sock_dgram, 0)

A linha acima é criar servidor de soquete com UDP [SOCK_DGRAM] protocolo. O mesmo código está lá no servidor.py.

enquanto é verdade:

Para executar o programa em loop infinito até o usuário fazer Ctrl+C. O mesmo código está lá no servidor.py.

s.sendto (send_data.Encode ('UTF-8'), (IP, porta))

Para enviar dados para mencionado IP e porta número.

dados, endereço = s.RecvFrom (4096)

Para receber quaisquer dados provenientes do servidor. O mesmo código está lá no servidor.py.

Explicação do código do servidor:

s.sendto (send_data.Encode ('UTF-8'), endereço)

Envie dados para o endereço do cliente.

Conclusão:

Podemos enviar ou receber dados UDP usando o programa Python. Internamente, ele usa o mecanismo do cliente do servidor.

Referências:

Para entender o TCP: https: // linuxhint.com/tcp_packet_capture_analysis/
Para entender o UDP: https: // linuxhint.com/udp_wireshark_analysis/
Envie e receba pacotes UDP via Linux CLI:
https: // linuxhint.com/send_receive_udp_packets_linux_cli/
Transferência de arquivo de soquete python: Enviar:
https: // linuxhint.com/python_socket_file_transfer_send/