Nous savons que lors de la demande d'un site, l'en-tête http contiendra certaines informations IP. En falsifiant ces informations, nous pouvons créer l'effet de différentes demandes d'accès IP.
Nous définissons les en-têtes CLIENT-IP et X-FORWARDED-FOR sur l'adresse IP que nous voulons falsifier, et le serveur obtiendra l'adresse IP que nous avons spécifiée.
X-Forwarded-For est un en-tête d'extension. Le protocole HTTP/1.1 (RFC 2616) ne le définit pas. Il a été introduit pour la première fois par Squid, un logiciel proxy de mise en cache, pour représenter la véritable adresse IP du demandeur HTTP. Il est désormais devenu un standard de facto et est utilisé par les principaux HTTP. proxys, les services de transfert tels que l'équilibrage de charge sont largement utilisés et sont écrits dans la norme RFC 7239 (Forwarded HTTP Extension).
(Partage vidéo d'apprentissage associé : Tutoriel vidéo php)
Dans le cas d'une communication bipartite TCP/IP normale, l'adresse IP source ne peut pas être falsifiée, c'est-à-dire pour dire, dans le protocole TCP/IP, l'adresse IP source du paquet de données peut être falsifiée, mais cela empêchera le paquet de données envoyé de revenir, rendant la communication normale impossible. C'est comme lorsque nous écrivons une lettre à l'autre partie, si nous écrivons la mauvaise adresse de l'expéditeur et que le destinataire répond en fonction de l'adresse de l'expéditeur sur l'enveloppe, l'expéditeur d'origine ne pourra pas recevoir la réponse.
Certaines attaques DDoS, comme SYN Flood, profitent de cette faille de TCP/ip pour mener à bien l'attaque.
PHP construit un exemple d'accès IP aléatoire :
<?php function curl($url,$ifpost = 0, $datafields = '', $cookiefile = '', $v = false){ $ip_long = array( array('607649792', '608174079'), //36.56.0.0-36.63.255.255 array('1038614528', '1039007743'), //61.232.0.0-61.237.255.255 array('1783627776', '1784676351'), //106.80.0.0-106.95.255.255 array('2035023872', '2035154943'), //121.76.0.0-121.77.255.255 array('2078801920', '2079064063'), //123.232.0.0-123.235.255.255 array('-1950089216', '-1948778497'), //139.196.0.0-139.215.255.255 array('-1425539072', '-1425014785'), //171.8.0.0-171.15.255.255 array('-1236271104', '-1235419137'), //182.80.0.0-182.92.255.255 array('-770113536', '-768606209'), //210.25.0.0-210.47.255.255 array('-569376768', '-564133889'), //222.16.0.0-222.95.255.255 ); $rand_key = mt_rand(0, 9); $ip= long2ip(mt_rand($ip_long[$rand_key][0], $ip_long[$rand_key][1])); $header = array("Connection: Keep-Alive","Accept: text/html, application/xhtml+xml, */*", "Pragma: no-cache", "Accept-Language: zh-Hans-CN,zh-Hans;q=0.8,en-US;q=0.5,en;q=0.3","User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)",'CLIENT-IP:'.$ip,'X-FORWARDED-FOR:'.$ip); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, $v); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); $ifpost && curl_setopt($ch, CURLOPT_POST, $ifpost); $ifpost && curl_setopt($ch, CURLOPT_POSTFIELDS, $datafields); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $cookiefile && curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile); $cookiefile && curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile); curl_setopt($ch,CURLOPT_TIMEOUT,30); //允许执行的最长秒数 $ok = curl_exec($ch); curl_close($ch); unset($ch); return $ok; } print_r(curl("URL")); ?>
Tutoriels d'articles connexes recommandés : tutoriel php
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!