>백엔드 개발 >PHP 튜토리얼 >PHP 위조 IP 및 URL 소스 정보 방법 summary_php 예제

PHP 위조 IP 및 URL 소스 정보 방법 summary_php 예제

WBOY
WBOY원래의
2016-05-16 20:30:101257검색

php 위조 원본

첫 번째 유형: php_curl

활성화 방법:

1. php.ini를 찾아 Extension=php_curl.dll을 수정하고 앞에 있는 세미콜론을 제거하세요.

2. php_curl.dll, php5ts.dll, libeay32.dll, ssleay32.dll을 windows/system32 디렉터리에 복사한 후 php 서비스를 다시 시작하세요.
3. test.php 테스트 파일을 생성하고 다음 코드를 삽입하세요.

코드 복사 코드는 다음과 같습니다.

$ch = 컬_init(); //초기화
cur_setopt($ch, CURLOPT_URL, http://www.example.com/search.asp?page=3&typeid=영화 제목&keyword=Jianguo Daye) //방문하고 싶은 페이지
cur_setopt($ch, CURLOPT_REFERER, http://www.example.com/) //가짜 소스 페이지
cur_setopt($chtml,CURLOPT_RETURNTRANSFER,1); //콘텐츠 표시 여부
컬_exec($ch); //실행
curl_close($ch); //닫기로 돌아가기
?>

두 번째 유형: fsockopen

코드 복사 코드는 다음과 같습니다.

$host = "www.example.com" //방문하고 싶은 도메인 이름
$target = "/test.asp"; //방문하고 싶은 페이지 주소
$referer = "http://www.example.com/" //가짜 소스 페이지
$fp = fsockopen($host, 80, $errno, $errstr, 30);
if(!$fp){
echo "$errstr($errno)
n";
}그밖에{
$out = "
$target HTTP/1.1 받기
호스트: $host
추천인: $referer
연결: Closernrn";
fwrite($fp, $out);
동안(!feof($fp)){
echo fgets($fp, 1024);
}
fclose($fp);
}
?>

PHP 컬이 웹사이트를 크롤링합니다
---------------------------------- --- ----------------------------------

코드 복사 코드는 다음과 같습니다.

//cURL 객체 초기화
$curl = 컬_init();
//크롤링에 필요한 URL 설정
컬_setopt($curl, CURLOPT_URL, 'http://cocre.com');
//헤더 설정
컬_setopt($curl, CURLOPT_HEADER, 1);
//결과를 문자열로 저장하거나 화면에 출력하도록 cURL 매개변수를 설정합니다.
컬_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// cURL을 실행하여 웹페이지 요청
$data = 컬_exec($curl);
// URL 요청 닫기
컬_닫기($curl);
// 얻은 데이터를 표시합니다
var_dump($data);

============================================= === ============================================== ==
컬_setopt() 함수는 CURL 세션에 대한 옵션을 설정합니다. option 매개변수는 원하는 설정이고 value는 이 옵션에서 제공하는 값입니다.
다음 옵션의 값은 긴 정수로 사용됩니다(옵션 매개변수에 지정):
*CURLOPT_INFILESIZE: 원격 사이트에 파일을 업로드할 때 이 옵션은 업로드 중인 파일의 크기를 PHP에 알려줍니다.
*CURLOPT_VERBOSE: CURL이 예상치 못한 모든 이벤트를 보고하도록 하려면 이 옵션을 0이 아닌 값으로 설정하세요.
*CURLOPT_HEADER: 출력에 헤더를 포함하려면 이 옵션을 0이 아닌 값으로 설정하세요.
*CURLOPT_NOPROGRESS: PHP가 CURL 전송에 대한 진행률 표시줄을 표시하지 않도록 하려면 이 옵션을 0이 아닌 값으로 설정하세요.
참고: PHP는 자동으로 이 옵션을 0이 아닌 값으로 설정하므로 디버깅 목적으로만 이 옵션을 변경해야 합니다.
*CURLOPT_NOBODY: 출력에 본문 부분을 포함하지 않으려면 이 옵션을 0이 아닌 값으로 설정합니다.
*CURLOPT_FAILONERROR: 오류 발생 시 PHP에서 오류(300보다 크거나 같은 HTTP 코드 반환)를 표시하지 않도록 하려면 이 옵션을 0이 아닌 값으로 설정하십시오. 기본 동작은 일반 페이지를 반환하고 코드를 무시하는 것입니다.
*CURLOPT_UPLOAD: PHP가 업로드를 준비하도록 하려면 이 옵션을 0이 아닌 값으로 설정하세요.
*CURLOPT_POST: PHP가 일반 HTTP POST를 수행하도록 하려면 이 옵션을 0이 아닌 값으로 설정하세요. 이 POST는 HTML 양식에서 주로 사용되는 일반 application/x-www-from-urlencoded 유형입니다.
*CURLOPT_FTPLISTONLY: 이 옵션을 0이 아닌 값으로 설정하면 PHP는 FTP에 대한 디렉터리 이름을 나열합니다.
*CURLOPT_FTPAPPEND: 이 옵션을 0이 아닌 값으로 설정하면 PHP는 원격 파일을 덮어쓰는 대신 적용합니다.
*CURLOPT_NETRC: 이 옵션을 0이 아닌 값으로 설정하면 PHP는 연결하려는 원격 사이트의 사용자 이름과 비밀번호를 ~./netrc 파일에서 찾습니다.
*CURLOPT_FOLLOWLOCATION: 이 옵션을 0이 아닌 헤더(예: "Location: ")로 설정하면 서버는 이를 HTTP 헤더의 일부로 보냅니다(이는 재귀적이므로 PHP는 "Location: "과 같은 헤더를 보냅니다).
*CURLOPT_PUT: HTTP를 사용하여 파일을 업로드하려면 이 옵션을 0이 아닌 값으로 설정합니다. 이 파일을 업로드하려면 CURLOPT_INFILE 및 CURLOPT_INFILESIZE 옵션을 설정해야 합니다.
*CURLOPT_MUTE: 이 옵션을 0이 아닌 값으로 설정하면 PHP는 CURL 함수에 대해 완전히 침묵합니다.
*CURLOPT_TIMEOUT: 긴 정수를 최대 시간(초)으로 설정합니다.
*CURLOPT_LOW_SPEED_LIMIT: 전송되는 바이트 수를 제어하려면 긴 정수를 설정합니다.
*CURLOPT_LOW_SPEED_TIME: CURLOPT_LOW_SPEED_LIMIT에 지정된 바이트 수를 전송하는 데 걸리는 시간(초)을 제어하려면 긴 정수를 설정합니다.
*CURLOPT_RESUME_FROM: 바이트 오프셋 주소(전송하려는 시작 형식)가 포함된 긴 매개변수를 전달합니다.
*CURLOPT_SSLVERSION: SSL 버전이 포함된 긴 매개변수를 전달합니다. 기본적으로 PHP는 자체적으로 어려운 작업을 수행하므로 보안을 강화하려면 수동으로 설정해야 합니다.
*CURLOPT_TIMECONDITION: 긴 매개변수를 전달하여 CURLOPT_TIMEVALUE 매개변수 처리 방법을 지정합니다. 이 매개변수를 TIMECOND_IFMODSINCE 또는 TIMECOND_ISUNMODSINCE로 설정할 수 있습니다. 이는 HTTP에만 해당됩니다.
*CURLOPT_TIMEVALUE: 1970-1-1부터 현재까지의 초 수를 전달합니다. 이 시간은 CURLOPT_TIMEVALUE 옵션 또는 기본 TIMECOND_IFMODSINCE에 의해 지정된 값으로 사용됩니다.
다음 옵션의 값은 문자열로 처리됩니다.
*CURLOPT_URL: PHP를 사용하여 검색하려는 URL 주소입니다. 컬_init() 함수를 사용하여 초기화하는 동안 이 옵션을 설정할 수도 있습니다.
*CURLOPT_USERPWD: 확인을 위해 [사용자 이름]:[비밀번호] 형식의 문자열을 전달합니다.
*CURLOPT_PROXYUSERPWD: HTTP 프록시에 연결하려면 [사용자 이름]:[비밀번호] 형식의 문자열을 전달합니다.
*CURLOPT_RANGE: 지정하려는 범위를 전달합니다. X 또는 Y가 제외된 'X-Y' 형식이어야 합니다. HTTP 전송은 쉼표(X-Y,N-M)로 구분된 여러 간격도 지원합니다.
*CURLOPT_POSTFIELDS: 모든 데이터가 포함된 문자열을 HTTP "POST" 작업으로 전달합니다.
*CURLOPT_REFERER: HTTP 요청에 "리퍼러" 헤더가 포함된 문자열입니다.
*CURLOPT_USERAGENT: HTTP 요청에 "user-agent" 헤더가 포함된 문자열입니다.
*CURLOPT_FTPPORT: ftp "POST" 명령에 사용되는 IP 주소가 포함된 IP 주소를 전달합니다. 이 POST 명령은 원격 서버에 우리가 지정한 IP 주소에 연결하도록 지시합니다. 이 문자열은 IP 주소, 호스트 이름, 네트워크 인터페이스 이름(UNIX의 경우) 또는 '-'(시스템 기본 IP 주소 사용)일 수 있습니다.
*CURLOPT_COOKIE: HTTP 쿠키가 포함된 헤더를 연결에 전달합니다.
*CURLOPT_SSLCERT: PEM 형식의 인증서가 포함된 문자열을 전달합니다.
*CURLOPT_SSLCERTPASSWD: CURLOPT_SSLCERT 인증서를 사용하기 위해 필요한 비밀번호가 포함된 비밀번호를 전달합니다.
*CURLOPT_COOKIEFILE: 쿠키 데이터가 포함된 파일 이름이 포함된 문자열을 전달합니다. 이 쿠키 파일은 Netscape 형식일 수도 있고 파일에 저장된 HTTP 스타일 헤더 스택일 수도 있습니다.
*CURLOPT_CUSTOMREQUEST: HTTP 요청 시 GET 또는 HEAD에서 사용할 문자를 전달합니다. 이는 더 모호한 HTTP 요청을 수행하는 데 유용합니다.
참고: 서버가 해당 명령을 지원하는지 확인하기 전에는 이 작업을 수행하지 마십시오.
다음 옵션에는 파일 설명(fopen() 함수를 사용하여 얻음)이 필요합니다.
*CURLOPT_FILE: 이 파일은 배치하고 전송하는 출력 파일이 됩니다. 기본값은 STDOUT입니다.
*CURLOPT_INFILE: 이 파일은 귀하가 보낸 입력 파일입니다.
*CURLOPT_WRITEHEADER: 이 파일에는 출력의 헤더 부분이 포함되어 있습니다.
*CURLOPT_STDERR: 이 파일에는 stderr 대신 오류가 기록되었습니다.

데이터 전송 중
------------------------------------- -------------------------------------

코드 복사 코드는 다음과 같습니다.

$phoneNumber = '13912345678';
$message = '이 메시지는 컬과 PHP에 의해 생성되었습니다.';
$curlPost = 'pNUMBER=' .urlencode($phoneNumber) '&MESSAGE=' .
urlencode($message) . '&SUBMIT=보내기';
$ch = 컬_init();curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/sendSMS.php');
컬_setopt($ch, CURLOPT_HEADER, 1);
컬_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
컬_setopt($ch, CURLOPT_POST, 1);
컬_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$data = 컬_exec();
컬_닫기($ch);
?>

============================================= === ============================================
프록시 서버 소개
------------------------------------- ----------------

코드 복사 코드는 다음과 같습니다.

$ch = 컬_init();
cur_setopt($ch, CURLOPT_URL, 'http://www.example.com');
컬_setopt($ch, CURLOPT_HEADER, 1);
컬_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
컬_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
cur_setopt($ch, CURLOPT_PROXY, 'fakeproxy.com:1080');
컬_setopt($ch, CURLOPT_PROXYUSERPWD, '사용자:비밀번호');
$data = 컬_exec();curl_close($ch);
?>

============================================= === ==============================================
SSL 및 쿠키 정보

HTTPS 프로토콜인 SSL의 경우 CURLOPT_URL 연결에서 http://를 https://로 변경하면 됩니다. 물론 사이트 확인을 위해 설정할 수 있는 CURLOPT_SSL_VERIFYHOST라는 매개변수도 있습니다.
쿠키와 관련하여 다음 세 가지 매개변수를 이해해야 합니다.
CURLOPT_COOKIE, 직접 세션 중에 쿠키를 설정합니다
CURLOPT_COOKIEJAR, 세션 종료 시 쿠키 저장
CURLOPT_COOKIEFILE, 쿠키 파일.

HTTP 서버 인증
---------------------------------- --- ---------------------------------- --- ---------------------
$ch = 컬_init();
컬_setopt($ch, CURLOPT_URL, 'http://www.example.com');
컬_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
컬_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
컬_setopt(CURLOPT_USERPWD, '[사용자 이름]:[비밀번호]')
$data = 컬_exec();
컬_닫기($ch);
?>
================================================= ===================================

http 구현

코드 복사 코드는 다음과 같습니다.

$ch = 컬_init( http://www.webjx.com/ );
컬_setopt($ch, CURLOPT_RETURNTRANSFER, true);
컬_setopt($ch, CURLOPT_BINARYTRANSFER, true);
$output = 컬_exec($ch);
$fh = fopen( out.html , 'w');
fwrite($fh, $output);
fclose($fh);

http 포스트 구현

코드 복사 코드는 다음과 같습니다.

//포스트에서 데이터 추출
추출($_POST);
//POST 변수 설정
$url = 'http://www.webjx.com/get-post.php';
$필드 = 배열(
'lname'=>urlencode($last_name),
'fname'=>urlencode($first_name),
'제목'=>urlencode($title),
'회사'=>urlencode($institution),
'나이'=>urlencode($age),
'이메일'=>urlencode($email),
'phone'=>urlencode($phone)
);
//POST에 대한 데이터를 URL화합니다
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string ,'&');
//연결 열기
$ch = 컬_init();
//URL, POST 변수 수, POST 데이터 설정
컬_setopt($ch, CURLOPT_URL, $url);
cur_setopt($ch, CURLOPT_POST, count($fields));
컬_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
//포스트 실행
$result = 컬_exec($ch);
//연결 끊기
컬_닫기($ch);

复主代码 代码如下:

set_time_limit(0);
@date_default_timezone_set('아시아/상하이');
함수 컬요청($url,$postfield,$proxy=""){
$proxy=트림($proxy);
$user_agent ="Mozilla/4.0 (호환; MSIE 6.0; Windows NT 5.1; SV1)";
$ch = 컬_초기화(); // 初始化CURL句柄
if(!empty($proxy)){
cur_setopt($ch, CURLOPT_PROXY, $proxy);//设置代理服务器
}
컬_setopt($ch, CURLOPT_URL, $url); //设置请求적URL
//curl_setopt($ch, CURLOPT_FAILONERROR, 1); // 启用时显示HTTP状态码,默认行为是忽略编号小于等于400的HTTP信息
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);//사용 가능한 정보:”放在header中递归的返回给服务器
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);// 设为TRUE把curl_exec()结果转化为字串,而不是直接输流
컬_setopt($ch, CURLOPT_POST, 1);//포스트 사용
컬_setopt($ch, CURLOPT_POSTFIELDS, $postfield); //设置POST提交字符串
//curl_setopt($ch, CURLOPT_PORT, 80); //设置端口
컬_setopt($ch, CURLOPT_TIMEOUT, 25); // 超时时间
cur_setopt($ch, CURLOPT_USERAGENT, $user_agent);//HTTP请求User-Agent:头
//curl_setopt($ch,CURLOPT_HEADER,1);//设为TRUE에서 출력중으로
//$fp = fopen("example_homepage.txt", "w");//출문문서
//curl_setopt($ch, CURLOPT_FILE, $fp);//设置输件的位置,值是一个资源类型,默认为STDOUT (浏览器)。
컬_setopt($ch,CURLOPT_HTTPHEADER,배열(
'수용 언어: zh-cn',
'연결: Keep-Alive',
'캐시 제어: 캐시 없음'
));//设置HTTP头信息
$document = 컬_exec($ch); //결정적인 CURL
$info=curl_getinfo($ch); //得到返回信息의특이성
//print_r($info);
if($info[http_code]=="405"){
echo "잘못된 프록시 {$proxy}n"; //대리출판
나가세요;
}
//curl_close($ch);
$document 반환;
}
//请求URL
$url="http://example.cn/getInfo.php";
//POST提交数据,可用HTTPWATCH查看
$postfield="userName=test&year=2008&passWord=123456&Submit=�ύ";
//代理服务器
$proxy = '';
//请求
$str=curlrequest($url,$postfield,$proxy);
//출판추
에코 $str;

复主代码 代码如下:

함수 request_by_socket($remote_server,$remote_path,$post_string,$port = 80,$timeout = 30){
$socket = fsockopen($remote_server,$port,$errno,$errstr,$timeout);
if (!$socket) die("$errstr($errno)");
fwrite($socket,"POST $remote_path HTTP/1.0rn");
fwrite($socket,"사용자 에이전트: 소켓 예");
fwrite($socket,"호스트: $remote_serverrn");
fwrite($socket,"콘텐츠 유형: 애플리케이션/x-www-form-urlencodedrn");
fwrite($socket,"콘텐츠 길이: ".strlen($post_string) 8."rn");
fwrite($socket,"수락:*
함수 request_by_curl($remote_server,$post_string){
$ch = 컬_init();
컬_setopt($ch,CURLOPT_URL,$remote_server);
컬_setopt($ch,CURLOPT_POSTFIELDS,'mypost='.$post_string);
컬_setopt($ch,CURLOPT_RETURNTRANSFER,true);
cur_setopt($ch,CURLOPT_USERAGENT,"Jimmy의 CURL 예제 베타");
$data = 컬_exec($ch);
컬_닫기($ch);
$data 반환;
}
함수 request_by_other($remote_server,$post_string){
$context = 배열(
'http'=>배열(
'방법'=>'POST',
'header'=>'콘텐츠 유형: application/x-www-form-urlencoded'."rn".
'사용자 에이전트: Jimmy의 POST 예제 베타'."rn".
'콘텐츠 길이: '.strlen($post_string) 8,
'content'=>'mypost='.$post_string)
);
$stream_context = stream_context_create($context);
$data = file_get_contents($remote_server,FALSE,$stream_context);
$data 반환;
}
?>
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.