Un anneau pour les gouverner tous

De Wiki Amis SH
Aller à la navigation Aller à la recherche



Le wiki : Accueil - Administrateur - Bureautique - Développeur - Intégrateur - Marketing - Multimédia - Objets numériques - Jeux - We make Hack


Un anneau pour les gouverner tous

« Trois Anneaux pour les rois elfes sous le ciel,
Sept pour les seigneurs nains dans leurs demeures de pierre,
Neuf pour les hommes mortels destinés au trépas,
Un pour le Seigneur des Ténèbres sur son sombre trône,
Au pays de Mordor où s'étendent les ombres
Un Anneau pour les gouverner tous
Un Anneau pour les trouver
Un Anneau pour les amener tous,
Et dans les ténèbres les lier
Au pays de Mordor où s'étendent les ombres. »

Objectif

S'identifier sur un site web distant.
Valider un captcha automatiquement.
Récupérer la valeur d'un compte à rebours et l'afficher.

Installer cURL

Curl est activé sur la plupart des hébergeurs de sites.
Utiliser cURL en Shell Bash sous GNU/Linux.
curl -L -O lien/fichier.ext > fichier.ext

Installer PHP cURL

Lister les paquets curl déjà installés : dpkg -l |awk '/php/ {print $1 "  "$2 "  "$3}' |grep curl
Plus rapide : dpkg -l |awk '/curl/ {print $1 "  "$2 "  "$3}' |grep php
apt-cache search Curl PHP
php-curl - CURL module for PHP [default]
php-http-request2 - Provides an easy way to perform HTTP requests
php7.0-curl - CURL module for PHP
php7.1-curl - CURL module for PHP
sudo apt-get install php-curl pour les distributions dérivées de Debian.
Redémarrer Apache: sudo /etc/init.d/apache2 restart.
Sous Windows cURL est disponible avec WAMP.
Il faut cependant l’activer en décommentant la ligne ;extension=php_curl.dll en enlevant le point virgule (;) au début de ligne depuis le fichier php.ini.

Installer PHP Curl sous Xampp

Installer PHP Curl sur XAMPP.

Exemple de scripts curl php fonctionnels

Scripts curl php fonctionnels.

Identification

Plusieurs tutoriel sur Curl, ou Ajax à base de XMLHttpRequest, ou de FOpen, de file_get_contents, de Data scraping ...
Se loguer avec mechanize, urllib et cookielib.
Vu également :
la notion de SSO : https://fr.wikipedia.org/wiki/Authentification_unique
ou encore OpenID : http://openid.net/developers/libraries/#php
qui ne correspondent pas forcément à mes attentes.
Faire un Curl sur la page de login.
Dans ce curl, je passe mes identifiants par requete POST.
Indiquer éventuellement un user agent.
A la suite du code, indiquer la page à parser.
Lancer le parser en DomDocument.

Mechanize

WWW::Mechanize
apt-get install libwww-mechanize-perl
man  WWW::Mechanize 

Poster automatiquement avec XRumer

https://fr.wikipedia.org/wiki/XRumer

Avec PHP

Afficher une page sur son site avec cURL

..

Test 1 ne fonctionne pas pour l'identification

/* Test connexion site distant. */
$url = "https://wiki.visionduweb.fr/index.php?title=Sp%C3%A9cial:Connexion";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/4.0");
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, "Login:Password");
$result = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
echo $result;
echo $error;
En cas de problème de certificat, tester :
# SSL certificate problem: self signed certificate.
CURLOPT_CAINFO
CURLOPT_CAPATH
En cas de problème de cookie, tester :
curl_setopt($ch, CURLOPT_COOKIEJAR, $moncookie);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0); /* Passer éventuellement true à 0 */
Dans mon test de connexion au wiki, avec curl, j'arrive simplement sur la page d'accueil du wiki, sur le formulaire, avec le choix des utilisateurs mémorisés proposés par le navigateur, mais, le login automatique ne se fait pas.
Je test avec un site distant, Mellowads. Idem, j'arrive bien à voir la page d'accueil, mais, ici, je n'arrive pas à simuler le clic sur le bouton pour me connecter.
Je test avec un autre site encore, Idem, j'arrive sur la page d'accueil, sans pouvoir me loguer automatiquement.
Résoudre le problème de connexion avec l'équipe SEO de GHSTools : http://www.ghstools.fr/forum/viewtopic.php?f=17&t=4283
curl_setopt($ch, CURLOPT_POST, 1);

Test 2 - Vérifier les nouveaux messages privés sur le forum alsacreations

Se connecter à son compte sur le site puis stocker les cookies de session,
Requêter la page désirée en passant les cookies de session,
Se déconnecter du site.
Le script ne retourne pas l'information attendue.
<?php
$timeout = 10;

$alsa_username = 'Nom utilisateur';
$alsa_password = 'Mot de passe utilisateur';

$cookies_file = __DIR__.'/cookies.txt';

/**************************************************
Première requête : Connexion
**************************************************/

$url = "http://www.alsacreations.com/ident/login/";

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

if (preg_match('`^https://`i', $url))
{
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
}

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);

// Forcer cURL à utiliser un nouveau cookie de session
curl_setopt($ch, CURLOPT_COOKIESESSION, true);

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
  'name' => $alsa_username,
  'password' => $alsa_password,
  'login-submit' => 'Connexion'
));

// Fichier dans lequel cURL va écrire les cookies
// (pour y stocker les cookies de session)
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies_file);

curl_exec($ch);

curl_close($ch);

/**************************************************
Seconde requête : Récupération du contenu
**************************************************/

$url = "https://www.alsacreations.com/pm/";

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

if (preg_match('`^https://`i', $url))
{
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
}

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);

// Fichier dans lequel cURL va lire les cookies
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies_file);

$page_content = curl_exec($ch);

$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

curl_close($ch);

/**************************************************
Troisème requête : Déconnexion
**************************************************/

$url = "http://www.alsacreations.com/ident/logout/";

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

if (preg_match('`^https://`i', $url))
{
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
}

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);

curl_exec($ch);

curl_close($ch);

// Effacement du fichier de stockage des cookies

if (file_exists($cookies_file))
  unlink($cookies_file);

/****************************************
Affichage
****************************************/

if ($http_code == 200)
{
 if (preg_match('`Vous avez (\d+) nouveaux messages`i', $page_content, $matches))
  echo $matches[1]. ' nouveau(x) message(s) sur le forum alsacreations.';
 else
  echo 'Aucun message sur le forum alsacreations.';
}
else
{
 echo 'Une erreur est survenue lors de la connexion au forum alsacreations : '. $http_code;
}
?>
 Source pour un script qui ne fonctionne pas. Son développeur est informé : http://oseox.fr/curl/session.html

Test 3 - Vérifier les nouveaux messages privés sur le forum développez

Se connecter à son compte sur le site puis stocker les cookies de session,
Requêter la page désirée en passant les cookies de session,
Se déconnecter du site.

Identifier les champs du formulaire de connexion

Identifier dans le code source HTML le nom des champs du formulaire de connexion.
Pour le nom de la variable bouton submit, faut'il utiliser la valeur name="" ou value="" du formulaire cible ? Peut être name = value ?
$postfields = array
(
'nomchamp1' => 'valeurlogin',
'nomchamp2' => 'valeurpass',
'nomboutonsubmit' => ?            
);
 Source : Syntaxe curl pour remplir un formulaire distant : https://www.developpez.net/forums/d1342545/php/langage/debuter/syntaxe-curl-remplir-formulaire-distant/

Obtenir le sid

Exemple 1
$sid  = $xpath->query('//input[@name="sid"]/@value')->item(0)->value;
Voir le code source de la page pour obtenir le sid.

<input type="hidden" name="sid" value="df946c6dbb9266e45b2a60977fc29d92" />

<input type="hidden" name="redirect" value="index.php" />

<input type="submit" name="login" class="btnmain" value="Connexion" tabindex="5" /> Le sid est en type hidden, à envoyer avec le login + mdp + connexion en post. Si c'est bon le serveur envoie la session et je la stock dans cookie.txt, puis, je peux accéder a ma page privé grâce à la session qui été enregistré dans le cookie.

Exemple 2
Dans le cas d'une balise <code><div></code> ayant une class avatarIcon.
Cette class n'étant sûrement utilisée qu'une seule fois dans un div, la procédure pour récupérer le sid serrait la suivante.
define('AUTHENTIFICATION', 'http://steamcommunity.com/profiles/76561197984780389');
libxml_use_internal_errors(true);
$doc = new DOMDocument();
 $doc->loadHTMLFile(AUTHENTIFICATION);
 $xpath = new DOMXPath($doc);
 $sid = $xpath->query('//div[@class="avatarIcon"/a[@href=$url]')->item(0)->value;
 echo $sid
 https://forum.phpfrance.com/php-avance/identification-sur-site-t254642.html
Lire et passer le lien dans la bibliographie.
 https://forum.phpfrance.com/php-avance/identification-sur-site-t254642-45.html
Exemple 3 - Récupérer un lien
Je cherche à récupérer dans ma variable $sid ce lien: steam://friends/add/76561197984780389
<div class="actionItem">
 <div class="actionItemIcon"><a href="steam://friends/add/76561197984780389"><img src="http://steamcommunity.com/public/images/skin_1/iconAddFriend.gif" width="16" height="16" border="0" /></a></div>
define('AUTHENTIFICATION', 'http://steamcommunity.com/profiles/76561197984780389');
libxml_use_internal_errors(true);
$doc = new DOMDocument();
$doc->loadHTMLFile(AUTHENTIFICATION);
$xpath = new DOMXPath($doc);
$sid = $xpath->query('//div[@class="actionItemIcon"]/a/@href')->item(0)->value;
echo $sid;

Veille sur curl

 Charger un fichier avec curl : https://www.scriptol.fr/rss/curl.php
 Passer un captcha avec curl : http://forum.hardware.fr/hfr/Programmation/PHP/passer-captcha-curl-sujet_130580_1.htm
 Manuel curl-setopt : http://php.net/manual/fr/function.curl-setopt.php
 Automatisation de login : http://www.commentcamarche.net/forum/affich-20438891-script-automatisation-de-login-site-web
 http://www.lephpfacile.com/forum/1-php-mysql/7117-fonction-copy
 Barecode avec curl : https://www.phpflow.com/php/barcode-generation-in-php-and-with-help-of-curl/
 https://www.dewep.net/realisations/utiliser-curl-php
 https://buzut.fr/comment-creer-un-crawler-web-en-php/
 https://stackoverflow.com/questions/2044340/http-basic-authentication-whats-the-expected-browser-experience
 https://stackoverflow.com/questions/25969196/how-to-define-the-basic-http-authentication-using-curl-correctly
 https://stackoverflow.com/questions/3044315/how-to-set-the-authorization-header-using-curl
 https://curl.haxx.se/docs/httpscripting.html
 https://unix.stackexchange.com/questions/119410/using-curl-to-access-basic-auth-protected-website-via-proxy-polipo
 https://www.vaultproject.io/intro/getting-started/apis.html
 http://www.thegeekstuff.com/2012/04/curl-examples/?utm_source=feedburner
 http://rustyrazorblade.com/2007/05/how-to-use-curl-to-hit-a-web-api-using-http-basic-authentication/
 https://www.electrictoolbox.com/php-curl-sending-username-password/
 https://web.archive.org/web/20170627214120/https://wiki.earthdata.nasa.gov/display/HDD/Curl+with+URS+Authentication

Avec Python

 http://www.voidspace.org.uk/python/articles/urllib2_francais.shtml#fetching-urls
 https://www.developpez.net/forums/d387253/autres-langages/python-zope/reseau-web/probleme-d-identification-site-web-via-python/
 http://www.voidspace.org.uk/python/articles/authentication.shtml#the-username-password

Récupérer le contenu du site avec Curl + xpath

Utiliser DOMXPath pour parser le contenu d'une page avec PHP

Créer une nouvelle instance DOM

$DOM = new DOMDocument;

Désactiver standard libxml errors

libxml_use_internal_errors(true);
Lorsque vous utilisez cette fonction, assurez-vous de supprimer votre tampon d'erreur interne (libxml_clear_errors ()). Si vous ne le faites pas et que vous l'utilisez dans un processus de longue durée, vous pouvez constater que toute votre mémoire est utilisée.

Charger le texte HTML dans l'objet DOMDocument

if (!$DOM->loadHTML($page))

Activer user error handling

{   $errors=&quot;&quot;;
    foreach (libxml_get_errors() as $error)  {
         $errors.=$error->message.'<br/>'; 
    }
libxml_clear_errors();
print "libxml errors:<br>$errors";
return;
}
Maintenant, l'objet DOMDocument nommé '$DOM' contient tout le texte cible sous la forme d'une structure DOM HTML. Il est prêt pour l'application de différentes méthodes et propriétés.

Initialiser un objet DOMXPath depuis l'objet DOMDocument

Initialiser l'objet DOMXPath pour les parser à venir.
$xpath = new DOMXPath($DOM);
Maintenant les méthodes XPath sont applicables sur le contenu.

Parser l'objet DOMXPath

URL de référence pour le contenu cible à parser. Elle permet de comprendre la structure HTML à interroger. : http://testing-ground.scraping.pro/blocks
$case1 = $xpath->query('//*[@id="case1"]')->item(0);
 $query = 'div[not (@class="ads")]/span[1]'; 
 $entries = $xpath->query($query, $case1);
 foreach ($entries as $entry) {
  echo " {$entry->firstChild->nodeValue} <br /> ";
 }

Réponse de la librairie libxml avec du HTML mal formé

The libxml library gave no warning about a malformed HTML non-related to the direct DOM structure parse, yet the library has issued an error for the malformed HTML instance that is the subject of a direct parse :
No warning for this case : <p><p><p>
For a missed bracket: <div prod="name1" <div …> and then for the extra opened tag: <div prod="name1"><div> the library has issued an exception for the DOMXPath "query" method.

Le script fonctionnel en entier

<?php
 $curl = curl_init('http://testing-ground.scraping.pro/blocks');
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
 $page = curl_exec($curl);
 if(curl_errno($curl)) // check for execution errors
 {
    echo 'Scraper error: ' . curl_error($curl);
    exit;
 }
 curl_close($curl);
 
 $DOM = new DOMDocument;
 
 libxml_use_internal_errors(true);
 
 if (!$DOM->loadHTML($page))
 {
 $errors="";
 foreach (libxml_get_errors() as $error) {
 $errors.=$error->message."<br/>"; 
 }
 libxml_clear_errors();
 print "libxml errors:<br>$errors";
 return;
 }
 $xpath = new DOMXPath($DOM);
 
 $case1 = $xpath->query('//*[@id="case1"]')->item(0);
 $query = 'div[not (@class="ads")]/span[1]'; 
 $entries = $xpath->query($query, $case1);
 foreach ($entries as $entry) {
  echo " {$entry->firstChild->nodeValue} <br /> ";
 }
 ?>
 Source d'origine du tutoriel : https://web.archive.org/web/20190722232848/http://scraping.pro/using-domxpath-for-parsing-page-content-in-php/

Valider un captcha automatiquement

Bypass un captcha.

Tester un script de validation de sites faucet

Robot.
Créer le dossier Captcha sur le disque C de Windows.
Installer Firefox
Installer l'extension anti-popup www.popupblocker.ir
Installer l'extension imacros pour lancer le script. ( Ne fonctionne pas sur la dernière version de Firefox Quantum. )
Installer Chrome
Quelle extension pour anti-popup ?
Installer l'extension imacros pour lancer le script.
Créer un compte sur https://www.9kw.eu et créer une api par défaut et identifier la clé secrète de l'api.
Gagner des crédits depuis https://www.9kw.eu/usercaptcha.html
Une solution alternative serrait d'utiliser l'api de 2captcha gratuite proposée par le développeur du script.
Télécharger le script : https://pastebin.com/Sbd4Z6FF
Renseigner la clé secrète de l'api
Chercher : SET API "YOUR API"
Chercher : TAG POS=1 TYPE=INPUT ATTR=NAME:apikey CONTENT=put your 9kw api here
Renseigner votre adresse Bitcoin
Chercher : put your bitcoin address here
S'inscrire sur FaucetHub avec la même adresse Bitcoin
Ne pas utiliser son compte principale au risque d'être bloqué du fait de l'utilisation de robots.
S'inscrire sur les sites suivants avec la même adresse Bitcoin
https://bagi.co.in/bitcoin 5 - 25 Satoshi every 5 minutes
Et d'autres liens à vérifier dans le script.
S'identifier avec l'adresse Bitcoin et changer le captcha par celui de solvemedia.
Le site se recharge. ( Pourquoi ? )
Remettre votre adresse Bitcoin. Valider le captcha de solvemedia.
Lancer le robot.

Transfert automatique

Script pour transférer vos gains depuis les sites suivants.
Télécharger le script : https://pastebin.com/aWDaNCZP
https://bituniverse .net
Suivre les échanges dédiés à ce script : https://www.bitcoinblackhat.com/Thread-Best-Bitcoin-Faucet-Bot-UP-TO-500-Satoshi-Every-5-Minutes

Changer le USER AGENT avec cURL

curl -A "user-agent-name-here" https://www.visionduweb.fr
curl --user-agent "user-agent-name-here" https://www.visionduweb.fr
curl -H "User-Agent: user-Agent-Name-Here" https://www.visionduweb.fr
Source : https://www.cyberciti.biz/faq/curl-set-user-agent-command-linux-unix/
Voir aussi : https://wiki.visionduweb.fr/index.php?title=Configurer_le_fichier_.htaccess#Une_liste_de_plus_de_7000_bots_bloqu.C3.A9s_avec_.htaccess

Bibliographie

Logiciels de scraping

 Comparateur sur mesure de logiciels de scraping : https://web.archive.org/web/20191118122846/http://scraping.pro/web-scraping-tools-and-services-landscape/
 Zennoposter : https://zennolab.com/en/products/zennoposter/
 Liste de logiciels de scraping : https://web.archive.org/web/20191112100011/http://scraping.pro/web-scraper-test-drive/
 Liste de logiciels de scraping : https://web.archive.org/web/20191013041918/http://scraping.pro/test-drive-blocks/
 Webextractor : http://www.webextractor.com
 Octoparse : https://web.archive.org/web/20190716185829/http://scraping.pro/octoparse-review/
 IRobotSoft for Visual Web Scraping : http://www.irobotsoft.com
 Videlibri pour GNU/Linux : http://videlibri.sourceforge.net
 Scraper en ligne : http://www.apfy.me
 HandyWebExtractor : scraping.pro/download/HandyWebExtractor.exe
 Import io ne résout pas les Captchas : https://www.import.io

Scraping de fichiers

 Scraping de fichiers .pdf : http://webdata-scraping.com/data-scraping-pdf-files-using-php/

Parser une page HTML en utilisant xpath et PHP

 https://www.daniweb.com/programming/web-development/threads/250361/help-needed-with-curl-xpath-php
 https://www.experts-exchange.com/questions/28697763/Php-curl-xpath.html
 http://quabr.com/42481116/parsing-using-curl-and-xpath-in-php-an-html-page-with-before-a-form
 http://www.itgo.me/a/711720580429803767/php-screen-scraping-with-curl-and-xpath
 https://www.abdulibrahim.com/php-scraping-using-dom-and-xpath-tutorial/

Soumission automatique de formulaires Curl et PHP


NAVIGATION

PARTICIPER ET PARTAGER

Bienvenue sur le wiki de Amis SH.
De nombreuses pages sont partagées sur ce wiki.
Créer un compte utilisateur pour participer sur le wiki.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Utiliser la recherche interne du wiki pour trouver votre contenu.
La page de discussion de Amis SH vous permet de poser vos questions.
Consulter le site amis-sh.fr pour installer votre propre serveur web.
Améliorer le contenu des pages avec vos retours depuis l'onglet discussion.
Ce contenu ne doit pas servir à nuire à autrui ou à un système informatique.
Protéger votre système Linux ou Windows avec cette page dédiée à la sécurité.

SOUTENIR CE WIKI

Soutenir le wiki avec un don en monnaie numérique :
AEON - Bitcoins - Bitcoins Cash - Bitcoins Gold - Bitcore - Blackcoins - Basic Attention Token - Bytecoins - Clams - Dash - Monero - Dogecoins - Ğ1 - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash

OBTENIR DE LA MONNAIE NUMERIQUE

Obtenir gratuitement de la monnaie numérique :
Miner de la cryptomonnaie.