2022/10/30

Envoyer et recevoir des données sur le réseau en Python

En quelques minutes avec Python, Debian 11.5 et nmap, on peut écrire un programme qui permet d'envoyer des données entre deux ordinateurs.

Quelques limites:

1. Il faut changer la constante RESEAU pour correspondre à so réseau local. La commande ip a est utile pour déterminer son adresse IP et son masque réseau.

2. Il faut que les deux machines soient sur le même réseau local pour se parler.

3. Il faut que les machines soient visibles par nmap. Normalement, que le ping fonctionne.

# Il faut installer nmap et pip avec apt-get install nmap python3-pip.
# Ensuite, il faut pip install python-nmap.
# Mieux vaut redémarrer le terminal après avoir installé les applications précédentes.
import nmap
import socket
RESEAU = "172.22.140.0/20"
def trouver_ordinateur() :
    print(
        "Découverte des ordinateurs sur le réseau. "
        "Ceci peut prendre quelques secondes..."
    )
    nm = nmap.PortScanner()
    nm.scan(hosts=RESEAU, arguments="-n -sP -PE -PA21,23,80,3389")
    ordre = 0
    ordinateurs = nm.all_hosts()
    for ordinateur in ordinateurs:
        print(f"{ordre} - {ordinateur}")
        ordre += 1
    choix = int(input("Entrer un  numéro: "))
    ordinateur = ordinateurs[choix]
    print(f"Ordinateur {ordinateur} choisi.")
    return ordinateur
def connecter(mode):
    port = int(input("Entrer port (2000 à 65535): "))
    socket_1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    canal_1 = (trouver_ordinateur(), port)
    canal_2 = (trouver_ordinateur(), port + 1)
    socket_2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    if mode == 1:
        socket_1.bind(canal_1)
        # J'ignore l'addresse avec _.
        donnees, _ = socket_1.recvfrom(4096)
        print(f"< {donnees.decode('utf-8')}")
    else:
        echange = socket_1
        socket_1 = socket_2 
        socket_2 = echange
        echange = canal_1
        canal_1 = canal_2
        canal_2 = echange
        socket_1.bind(canal_1)
    print("Ctrl+C pour arrêter le serveur...")
    while True:
        a_envoyer = input("> ")
        if a_envoyer == "disparaître":
            break
        socket_2.sendto(a_envoyer.encode('utf-8'), canal_2)
        # J'ignore l'addresse avec _.
        donnees, _ = socket_1.recvfrom(4096)
        print(f"< {donnees.decode('utf-8')}")
    socket_1.close()
    socket_2.close()
if __name__ == "__main__":
    mode = int(input(
        "Choisir le mode (1. écouter avant de la parler, "
        "2. parler avant d'écouter): "
    ))
    connecter(mode)

Pourquoi avoir deux sockets? Pour pouvoir communiquer sur le même ordinateur en ouvrant deux terminaux et où le premier terminal fonctionnera en mode 1 et le second en mode 2.

J'ai fait quelques changements au code d'origine en écrivant ce message. Si ça plante, c'est potentiellement à cause de ça. Ça devrait être assez simple à corriger. Le code est court.

2022/10/23

IBM 560Z, SSD M.2 NGFF et FreeDos 1.3

Je suis tombé sur un adapteur M2 NGFF SATAIII vers IDE: https://www.cafr.ebay.ca/itm/123459365354. Ce qui vient dans la boîte:

J'ai trouvé un SSD M.2 2280 SATA III de 500 Go et je l'ai connecté.

J'ai pris mon vieil adapteur IDE à USB et j'ai utilisé Rufus pour installer FreeDos dessus. Il ne venait pas avec la version plus récente et si je mettais les fichiers de FreeDos 1.3, en démarrant le 560Z, FreeDos pensait qu'il démarrait d'un CD dynamique. Je voulais avoir une vraie installation sur disque dur, donc j'ai continué à chercher.

J'ai utilisé Oracle VirtualBox en le configurant pour DOS. J'ai alloué 2 Go pour le disque dur et j'ai choisi le format VHD. J'ai pris le LiveCD FreeDos 1.3 et je l'ai inséré dans la machine virtuelle avant de la partir. L'installation s'est déroulée normalement. J'ai éteint la machine et j'ai utilisé 7-zip pour décompresser le fichier VHD. J'ai pu voir l'arborescence de FreeDos une fois installé sur un disque dur. Avec mon adatpeur IDE à USB, j'ai effacé tous les fichiers que Rufus avait copié et j'y ai copié ceux du VHD.

Pour installer le SSD dans l'IBM 560Z, il faut enlever le socle à disque dur du 560Z. Les soudures du connecteur IDE dépassent légèrement, ce qui fait plier le socle à disque dur et rend impossible l'insertion du disque dans le portable. Sans le socle, il faut attacher une corde pour retirer le disque dur du 560Z ultérieurement. Pour insérer le disque, il faut y aller tranquillement et pousser de gauche a droite vers l'intérieur. Les connecteurs mâle et femelle IDE vont s'aligner naturellement et une fois en place, le SSD tient bien fermement.

Quelques points importants:
  • La résolution maximale est de 640x480.
  • On peut changer le mode 80,50 et ensuite utiliser Fn + F8 pour étirer la console sur toute la surface de l'écran du portable.
  • Si on possède les exécutables pour DOS d'IBM pour le 560Z, ils fonctionnent sous FreeDos 1.3. Le seul problème est de les extraire de leurs installateurs d'origines si on n'a pas de disquette. C'était mon cas. J'ai utilisé VirtualBox et la fonctionnalité de diquettes virtuelles et de CD virtuels. Après le démarrage de la machine virtuelle, avec le CD virtuel, on pointe vers un répertoire avec les exécutables d'IBM. On insère une disquette virtuelle vierge. On va dans E: et on exécute le programme. Le programme copiera des fichiers et d'autres .exe vers A:. Ensuite, on retourne dans C: et on copie A: dans C:\copie. On peut ensuite décompresser de nouveau le VHD pour récupérer les exécutables qu'on copie ensuite avec l'adapteur IDE à USB sur le SSD à l'endroit de son choix.
    • Pour créer un dossier sous FreeDos: mkdir nom_fichier.
    • Pour copier sous FreeDos: copy A:\ C:\copie\.
Liens externes:

2022/10/22

Acer Aspire ES 15 et Debian 11.5

Tout ce que j'ai décrit ici est à vos risques!

Installer Debian 11.5 sur un Acer Aspire ES 15, c'est comme une quête d'un jeu vidéo pourri produit par Acer avec des énigmes posées par le BIOS qui ne te donne aucune piste pour les résoudre. Je me questionnerai dorénavant avant d'acheter un ordinateur Acer.

Pour moi, l'installation de Debian 11.5 AMD 64 s'est bien passée. J'avais choisi le partionnement par défaut sur un SSD de 128 Go. C'est au redémarrage du système que la quête a commencée.

Première queète: un message No Boot Device avec une image de disque dur avec un loupe m'apparaît. Je cherche et je tombe sur une procédure qui explique comment réinstaller GRUB 2 et copier à la main un fichier grubx64.efi en bootx64.cfg dans un répertoire /boot/efi/BOOT/. J'ai changé la procédure et la mienne est celle-ci:

  1. Démarrer la clé USB Debian 11.5 AMD 64 Net Install.
  2. Choisir Advanced tools.
  3. Choisir Rescue Mode.
  4. Suivre les indications jusqu'à ce que le mode demande de monter une partition root. Il faut choisir celle que l'installeur a créée. Dans mon cas, /dev/sda2.
  5. Une partition /boot/efi sera détectée et on demandera s'il faut la monter. Choisir de la monter.
  6. Une fois l'invite de commande atteinte, cd /boot/efi.
  7. Il devrait y avoid un dossier nommé debian. Utiliser la commande ls pour confirmer.
  8. Créer un dossier BOOT. EN LETTRE MAJUSCULES!
  9. Entrer la commande cp debian/* . en étant toujours dans le dossier /boot/efi/BOOT/.
  10. Créer le fichier bootx64.efi à partir du fichier grubx64.efi avec cp grubx64.efi bootx64.efi.

Ensuite, je me retrouve bloqué sur un écran qui affiche Security Boot Fail. Il faut entrer dans le BIOS et mettre un mot de passe administrateur/supervisor password/master password ce qui débloque les options dans une aute page du bios pour désactiver le Secure Boot.

À partir de ce moment, Debian démarre finalement.

Pour activer la carte wifi, j'ai dû autoriser les paquets propriétaires en modifiant /etc/apt/sources.list. Il faut commenter les lignes présentes et ajouter les lignes non-free (voir le 3e lien ci-dessous). Le paquet nécessaire est iwlwifi.

Liens qui m'ont aidés:

Mise à jour 2023-09-08: un sudo apt-get dist-upgrade peut briser grub. Pour s'en sortir, à l'invite de commande du grub:

set root=(hd0, gpt2)
set prefix=(hd0, gpt2)/boot/grub
insmod normal
normal

J'ai compris ceci en lisant entre autre ce site https://copyprogramming.com/tutorial/what-to-do-when-i-get-an-attempt-to-read-or-write-outside-of-disk-hd0-error-and-boot-repair-does-not-solve-the-problem 

Terminale Debian e tmux

 I comandi

Su debian: 

sudo apt install tmux
tmux new -s qualcosa_lungo
tmux ls
tmux a -t qualcosa_lungo

Hotkeys

Ognuna chiava si deve premere dopo avere premuto ctrl+b:
%          # aprire un'altro terminale verticale
ctrl+[     # entrare il modo navigazione del terminale con le frecce
ctrl+space # nel modo di navigazione a frece, selezionare testo
alt+w      # copiare il testo

Ubuntu e git

 

I comandi

Questo esempio usa GitLab. 

In un nuovo Ubuntu 20.04:

ssh-keygen -t ed25519
git config --global user.name "User Name"
git config --global user.email "username@domain.com"
git config --global url."git@gitlab.com:".insteadOf "https://gitlab.com/"
git clone git@gitlab.com:orgranization/repo.git

Le spiegazioni

Il primo comando genera una chiave asimmetrica. Due file sarano create. Una di queste finirà con .pub. È la parte pubblica. Il contento è da copiare sul sito di GitLab per autorizzare la chiave.

Il quarto comando forza l'uso di SSH facendo una conversione degli URL di tipo HTTPS in URL di tipo SSH.

Il comando cinque ottiene il code dal server. Quando vedrai il fingerprint, cerchialo su Google per confermare che il server è il vero. Per GitLab, puoi andare qui https://docs.gitlab.com/ee/user/gitlab_com/.