Forum Programmation.shell Extraire username password d'une page html

Posté par  . Licence CC By‑SA.
Étiquettes :
-2
29
mar.
2019

Bonjour…

je veux faire un script shell pour activer free server vpn
du site https://freevpn.it/accounts/
pour cela il me faut le username et le password qui se trouve quelque part dans la page source html

j'ai utilisé cette commande avec sed mes helas ca na pas fonctionner j'espère bien que vous pourriez peut-être m'aider

fichie a extraire

cfg.config:
pptp
RVvm5SCUtmoR

HTTPSERV="https://freevpn.it/accounts/"
wget -O $FreeServertmpa $HTTPSERV > /dev/null 2>&1
sed -ne '/<li><b>Password:</b> / s/.*<li><b>Password:    </b>\(.*\)<\/</li><li><b>.*/\1/p' $FreeServertmpa >     $FreeServertmpb
  • # Jamais deux sans trois

    Posté par  . Évalué à 7.

    Salut :)

    Au grand risque de me répéter encore une fois… tenter de parser du HTML à coups de sed tue des bébés phoques

    mes helas ca na pas fonctionner

    Blunk. Là c'est mon parser interne qui a planté. :)

    Comme d'habitude, il y aura peut-être des gens pour te donner une solution rapide. Qui marchera dans ton cas.

    Je ne sais pas pourquoi tu t'obstine avec sed.

    Matricule 23415

  • # Eviter le travail

    Posté par  (Mastodon) . Évalué à 2. Dernière modification le 29 mars 2019 à 09:04.

    Oui, faut pas parser du HTML c'est rapidement casse-gueule. Ou alors faut le faire bien avec une vraie lib, mais c'est hors sujet.

    Pourquoi tu veux parser du HTML ? Pour trouver une information qui est en clair dans la page rendue ? Alors utilise un browser en ligne de commande : lynx !

    lynx https://freevpn.it/accounts/ --dump va te faire un fichier texte du rendering de ta page. Du coup, un simple grep Password marchera !

    En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

    • [^] # Re: Eviter le travail

      Posté par  . Évalué à 0. Dernière modification le 29 mars 2019 à 11:47.

      merci mais ca ne fonctionne pas
      lynx https://freevpn.it/accounts/ --dump

      -bash: lynx: command not found

      • [^] # Re: Eviter le travail

        Posté par  (site web personnel, Mastodon) . Évalué à 1.

        lynx n'est généralement pas installé par défaut sur le système, ex debian like:

        apt-get install lynx

        🦀🐍 http://github.com/buxx 🖥 https://algoo.fr 📋 https://tracim.fr

        • [^] # Re: Eviter le travail

          Posté par  . Évalué à 1.

          je suis sur linux enigma2

          not install lynx

          https://i.imgur.com/nB0pqAg.png?1

          • [^] # Re: Eviter le travail

            Posté par  (site web personnel, Mastodon) . Évalué à 1.

            Ah oui, alors là je sais pas comment installer lynx sur enigma2. MAis du coups, vu le système je comprend pourquoi tu souhaite faire ça en bash.

            Regarde pour faire ton extraction depuis html avec xpath: https://stackoverflow.com/questions/4984689/bash-xhtml-parsing-using-xpath

            Sinon, à tout hasard est-ce qu'il y a du python sur cette machine ? (teste d'entrer python --version). Mais je ne pense pas.

            🦀🐍 http://github.com/buxx 🖥 https://algoo.fr 📋 https://tracim.fr

          • [^] # Re: Eviter le travail

            Posté par  . Évalué à 5.

            Salut :)

            je suis sur linux enigma2

            Et bah, t'es pas sorti de la galère…

            Comme tu n'as pas suivi les liens proposés dans ton post précédent ou je parlais d'outils plus adaptés que sed pour parser du HTML, bah sors ta rame et rame galérien.

            Je n'ai pas de tambour ni de fouet, mais rame ! Un peu plus vite !

            Matricule 23415

  • # ouch

    Posté par  . Évalué à 2.

    mise à part les usage de sed pour parser du html, tu fais une erreur de la taille d'un éléphant

    Je parse ta commande sed

    
    /<li><b>Password:</ 
    # lorsqu'on matche <li><b>>Password:<
    on fait la commande branch (b )
    b...
    
    

    tu as fais l'erreur de faire la commande sed puis ta regex
    il vallait mieux faire
    sed -ne '#Password:# s#.Password: (.)<\/.*#\1#p'

    tu n'es pas obligé d'utiliser / avec sed, généralement ça te plante très facilement ;)

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

    • [^] # Re: ouch (bis)

      Posté par  . Évalué à 1.

      Salut,

      sed -ne '#Password:# s#.Password: (.)<\/.*#\1#p'

      Autant pour le délimiteur de commandes (substitution (s#…#…#)), on peut le changer tel quel. Autant pour le délimiteur de motif (/…/{commande sed}), il est impératif de protéger le 1er caractère faisant office de nouveau délimiteur.


      sed -ne '\#Password:# s#.Password: (.)<\/.*#\1#p'
      ;-)

      • [^] # Re: ouch (bis)

        Posté par  . Évalué à 0.

        malheureusement rien ne marche
        fichier FreeServertmpb 0kb

        sed -ne '\#Password:# s#.Password: (.)<\/.*#\1#p'     $FreeServertmpa > $FreeServertmpb
        
        • [^] # Re: ouch (bis)

          Posté par  . Évalué à 2.

          il manque une * dans la re (.) => (.*)

          Il ne faut pas décorner les boeufs avant d'avoir semé le vent

        • [^] # Re: ouch (bis)

          Posté par  . Évalué à 1.

          sed -ne 's#.*Password:</b> \([^<]*\).*#\1#p' 
          
          • [^] # Re: ouch (bis)

            Posté par  . Évalué à 1.

            merci beaucoup ça marche ton truc
            une autre question si vous le voulez bien comment faire pour avoir le username en première ligne et le Password dans la deuxième ligne

          • [^] # Re: ouch (bis)

            Posté par  . Évalué à 1. Dernière modification le 30 mars 2019 à 19:07.

            voila mon script
            ```

            !/bin/sh

            *******************************************

            /etc/init.d/openvpn stop > /dev/null 2>&1
            rm -r -f /etc/openvpn; mkdir /etc/openvpn
            wget -q -O- --trust-server-names "https://ia600702.us.archive.org/26/items/dreamosat /cfg.itconf" > /etc/openvpn/cfg.conf
            DTMP=`mktemp -d`
            CLT='/etc/openvpn/client.conf'
            cd $DTMP
            vph="https://freevpnme.b-cdn.net/FreeVPN.me-OpenVPN- Bundle.zip"
            wget -q -O 'vpn.zip' $vph
            find . -type f -name "vpn.zip" -exec unzip {} + > /dev/null 2>&1
            for i in */; do find "$i" -type f -exec mv {} "$i" \; && rm -r "$i"*/; done
            cd FreeVPN.me-OpenVPN-Bundle
            OVPN=`find . -maxdepth 1 -name "*it-UDP-443*" -print`
            echo $OVPN
            mv $OVPN client.conf
            sed -i 's/auth-user-pass/auth-user-pass cfg.itconf/g' client.conf
            cp -f client.conf $CLT

            echo "Current IP: wget -qO- http://ipecho.net /plain;echo"
            /etc/init.d/openvpn start > /dev/null 2>&1
            sleep 8
            echo "New IP : wget -qO- http://ipecho.net /plain;echo"
            rm -r -f $DTMP
            exit 0
            ```mais comme le password change souvent j'ai besoin d'extraire l'username et le password de la page html du site et le mettre dans un fichie cfg dans etc/openvpn

          • [^] # Re: ouch (bis)

            Posté par  . Évalué à 1. Dernière modification le 30 mars 2019 à 23:26.

            j'ai utiliser cette commande

            sed -ne 's#.*Username:</b>\([^<]*\).*#\1#p'

            et j'ai comme résultat (j'ai juste supprimer l'espace entre le
            ""
            et
            "\"

             freevpnit

            par contre je veux juste freevpnit ou pptp

            • [^] # Re: ouch (bis)

              Posté par  . Évalué à 1.

              J'ai pas tout pigé à tes explications ;-(

              $ wget -q -O- https://freevpn.it/accounts/ | sed -ne 's#.*Username:</b>[[:print:]]\([^<]*\).*#\1#p'
              freevpnit
              Par contre c'est vraiment dommage que tu ne puisses pas installer lynx ou w3m ;-\
              ```
              $ lynx -dump https://freevpn.it/accounts/ | grep -Po '(Password|Username):( |\xA0)\K[^ ]*'
              pptp
              RVvm5SCUtmoR
              freevpnit
              RVvm5SCUtmoR

              $ w3m -dump -T text/html https://freevpn.it/accounts/ | grep -Po '(Password|Username):( |\xA0)\K[^ ]*'
              pptp
              RVvm5SCUtmoR
              freevpnit
              RVvm5SCUtmoR
              ```

              • [^] # Re: ouch (bis)

                Posté par  . Évalué à 1.

                cette commande ne fonctionne pas sur ma machine vu solo 4k linux system python 2.7.13

                $ wget -q -O- https://freevpn.it/accounts/ | sed -ne 's#.*Username:    </b>[[:print:]]\([^<]*\).*#\1#p'
                
                par contre celui-ci fonctionne mais son succès
                
                sed -ne 's#.*Username:</b> [[:print:]]\([^<]*\).*#\1#p'
                

                la commande:

                sed -ne 's#.*Username:</b>\([^<]*\).*#\1#p
                rersultat =  freevpnit

                j'ai utiliser

                sed 's/Â.//'
                rien n'a été supprimé

              • [^] # Re: ouch (bis)

                Posté par  . Évalué à 1. Dernière modification le 01 avril 2019 à 21:39.

                Finalmente ce si marche bien merci pour votre aide

                wget -q -O- https://freevpn.it/accounts/ | sed -ne 's#.*Username:    </b>\([^<]*\).*#\1#p' | sed 's/Â.//' > "/etc/openvpn/cfg.conf" 
                wget -q -O- https://freevpn.it/accounts/ | sed -ne     's#.*Password:</b> \([^<]*\).*#\1#p' >> "/etc/openvpn/cfg.conf" 
                

                résulta:

                freevpnit
                RVvm5SCUtmoR

  • # avec un parser HTML

    Posté par  (site web personnel) . Évalué à 7.

    python accounts.py
    pptp
    RVvm5SCUtmoR

    le programme

    import requests
    r = requests.get('http://freevpn.it/accounts')
    from bs4 import BeautifulSoup
    html = r.text
    soup = BeautifulSoup(html,"lxml")
    print soup.find('div',attrs={"class":"plan"}).findAll('li')[2].b.next_sibling
    print soup.find('div',attrs={"class":"plan"}).findAll('li')[3].span.previous_element
    

    ウィズコロナ

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.