We know that when requesting a site, the http header will carry some IP information. By forging this information, we can form the effect of different IP access requests.
We set the header CLIENT-IP and X-FORWARDED-FOR to the IP we want to forge, and the server will get the IP we specified.
X-Forwarded-For is an extension header. The HTTP/1.1 (RFC 2616) protocol does not define it. It was first introduced by Squid, a caching proxy software, to represent the real IP of the HTTP requester. Now it has become a de facto standard and is used by major HTTP proxies, Forwarding services such as load balancing are widely used and are written into the RFC 7239 (Forwarded HTTP Extension) standard.
(Related learning video sharing: php video tutorial)
In the case of normal TCP/IP two-party communication, it is impossible to forge the source IP, that is to say , In the TCP/IP protocol, the source IP of the data packet can be forged, but this will make the sent data packet never return, making normal communication impossible. This is just like when we write a letter to the other party, if we write the wrong sender's address, and the recipient replies according to the sender's address on the envelope, the original sender will not be able to receive the reply.
Some DDoS attacks, such as SYN flood, take advantage of this flaw in TCP/ip to implement the attack.
php constructs random ip access example:
<?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")); ?>
Recommended related article tutorials: php tutorial
The above is the detailed content of How to construct random ip access in php. For more information, please follow other related articles on the PHP Chinese website!