php소켓프로그램
페이지 정보
본문
PHP에서는 간단하게 사용가능한 소켓연결 함수가 있다. fsockopen()라는 함수는 보통
우리가 포트검사는 쓰는 telnet 도메인이나ip 포트번호 와 같은 역할을 한다.
해당 호스트의 도메인과 포트를 알고 소켓으로 파이프를 연결하여 문자를 보내고 그에 반응
하는 결과문자열을 가져오는것이다.가운데 TCP/IP라는 프로토콜이 존재 하기때문에
서버 데몬이 perl 든 Unix C든 상관없이 그리고 클라이언트 역시 java 로 만들었든 php로 만들었든 C로 만들었든 상관없이 접속할수 있습니다.
socket을 이용해서 해당웹페이지의 내용을 가져온다
$url1=\"www.webprogram.co.kr\";
$url2=\"GET / HTTP/1.0rnHost: www.webprogram.co.krrnrn\";
$fp = fsockopen ($url1, 80, $errno, $errstr,30);
//첫번째인수는 연결할 도메인이나ip 두번째는 도메인의포트 세번째 네번째는 실패시 나타나는
//에러메세지 다섯번째는 연결시도시간 30초이다. 소켓연결 파이프를 시도한다.
if (!$fp) {
//성공이면 0이아닌수 실패면 0
echo \".... $errstr ($errno)<br>n\";
} else {
fputs($fp, $url2);
//연결된 호스트에 파이프가 연결되어있어 그위에 해당문자열을 올려놓는다.후에 데몬처리
while(!feof($fp)) {
echo fgets($fp,128);
//처리한 데몬이 출력하여 파아프에 결과문자열올려놓음. 문자열의 마지막까지 128비트씩
//가져와서 화면에 출력
}
fclose ($fp);
//소켓파이프 연결제거
}
**GET / HTTP/1.0rnHost: 에서 /는 해당페이지의 초기페이지를 의미하며 임의의
페이지를 원할시는 /goods_list.php or http://www.webprogram.co.kr/goods_lsit.php
으로 지정하면 됩니다.**
[소켓을 이용해서 pop3서버 접근하기]
fp=@fsockopen(\"www.webprogram.co.kr\",110,error,errorstr,30);
echo fp;
if(!fp){
echo \"Socket Connect Error - error(errorstr)\";
}else{
echo \"Socket Connect Success\";
fputs(fp,\"user web_junsikn\");
fputs(fp,\"pass ysarahan\");
fputs(fp,\"listn\");
buf=fgets(fp,255);
msg=0;
echo buf
}
fclose(fp);
[fopen과 fsockopen차이]
둘다 파일을 제어하지만 fopen은 http://로 시작하는 파일에 대해서는 실패하는 경우가 많다.
fopen이 실패하는 경우는 버그가 아니라 fopen이 헤더정보를 HTTP 1.0으로 요청하기 때문이다
HTTP 1.1이면 실패한다. fopen은 단순히 로컬 파일에 사용하며 fsockopen은 원격파일에 접근
할때사용한다
fsockopen으로 타싸이트 로그인하는 방법 좀 알려주시면 감사할께요..
어떻게 해야.. 로그인인 되나요
번거럽지만 간단한 소스도 올려줬으면 감사합니다..
아직 초보라 글은 이해하기 힘들어서요.. ㅜ.ㅡ
행복한고니 05-01-31 10:54
HTTP 헤더에 대한 이해가 있어야할겁니다.
간단한 예제 하나 올려드리지요. 계속 로그인한 상태로 쓰는 건 아니고... 단지 로그인만 하는 예제입니다.
로그인할 페이지가 http://www.test.com/ver2/login.php 이고
login.php?id=uesr&pass=pass 의 방법으로 로그인이 된다고 하면...
$fp = fsockopen('www.test.com', 80);
$header = \"GET /ver2/login.php?id=user&pass=passrn\";
fputs($fp, $header);
while (!feof($fp))
{
echo fgets($fp, 1024);
}
fclose($fp);
나머지는 스스로 응용해보세요.
흑심품은연필 05-01-31 15:11
로그인을 쿠키로 구현했느냐 세션으로 구현했느냐에 따라서,
저 HTTP 헤더를 서버에 날려줘야 합니다 www.php.net 에 가셔서 화일소켓을 검색하시면 외국인들이 댓글로 달아놓은것이 있습니다 거기서 소스를 분석해 보세요 ^^
소켓 연결(fsockopen함수 이용)
※ 소켓연결은 \"telnet 호스트주소 포트번호\"명령과 같은 역할을 한다.
기본 문법(Header문과 Body문을 모두 가져온다.)
<?
$port = 80;
$address = \"ysaraha.ttongfly.net\";
//## IP또는 도메인만 가능하며 http://과 파일명은 빼고 입력한다. ##//
$out1 = \"GET / HTTP/1.0rnrn\";
$fp = @fsockopen ($address, $port, $errno, $errstr, 30);
if ($fp)
{
echo \"<b>정상 사이트</b><br>\";
fputs ($fp, $out1);
while (!feof($fp))
{
echo fgets ($fp,128);
}
fclose ($fp);
}
?>
기본문법(Body문만 가져온다.)
<?
$address = \"ttongfly.net\";
$port = 80;
$out = \"GET / HTTP/1.0rnrn\";
$fp = @fsockopen($address,$port,$errno,$errstr,15);
usleep(50);
if($fp)
{
echo \"#### 80 포트 연결 성공 ####\";
echo \"<br>\";
socket_set_timeout($fp, 30);
fwrite($fp, $out);$body = FALSE;
while(!feof($fp))
{
$buffer = fgets($fp, 128);
if($body == TRUE) $content .= $buffer;
//# 내용문 문자열 시작 #//
if($buffer==\"rn\") $body = true;
}
echo $content;
fclose($fp);
}
else
{
echo \"#### 80 포트 연결 실패 ####\";
}
?>
기본 문법
<?
define(\"_IP\", \"219.253.165.66\");
define(\"_PORT\", \"65000\");
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0)
{
echo \"n 소켓 생성 에러...n\";
exit;
}
$result = socket_connect($socket, _IP, _PORT);
if ($socket < 0)
{
echo \"n 소켓 연결 에러 : \".socket_strerror($result).\"n\";
}
$ntest = 3;
$strmsg = \"abcde\";
$msg = $ntest.$strmsg;
$sw = socket_write($socket, $msg, strlen($msg));
if($sw < 0)
{
echo \"n 서버에 메세지 전송이 실패 하였습니다. Error : \".socket_strerror($result).\"n\";
@socket_close($socket);
exit;
}
/*
에~ 또 이걸 할라는 의의는요.
제 pc (winsock 서버로 설정)
호스팅 서버 (winsock 클라이언트)
글이 등록되면 소켓으로 제 pc 에 데이터를 쏴줄려고 합니다.
바로바로 확인할수있게 ^^;
*/
?>
우리가 포트검사는 쓰는 telnet 도메인이나ip 포트번호 와 같은 역할을 한다.
해당 호스트의 도메인과 포트를 알고 소켓으로 파이프를 연결하여 문자를 보내고 그에 반응
하는 결과문자열을 가져오는것이다.가운데 TCP/IP라는 프로토콜이 존재 하기때문에
서버 데몬이 perl 든 Unix C든 상관없이 그리고 클라이언트 역시 java 로 만들었든 php로 만들었든 C로 만들었든 상관없이 접속할수 있습니다.
socket을 이용해서 해당웹페이지의 내용을 가져온다
$url1=\"www.webprogram.co.kr\";
$url2=\"GET / HTTP/1.0rnHost: www.webprogram.co.krrnrn\";
$fp = fsockopen ($url1, 80, $errno, $errstr,30);
//첫번째인수는 연결할 도메인이나ip 두번째는 도메인의포트 세번째 네번째는 실패시 나타나는
//에러메세지 다섯번째는 연결시도시간 30초이다. 소켓연결 파이프를 시도한다.
if (!$fp) {
//성공이면 0이아닌수 실패면 0
echo \".... $errstr ($errno)<br>n\";
} else {
fputs($fp, $url2);
//연결된 호스트에 파이프가 연결되어있어 그위에 해당문자열을 올려놓는다.후에 데몬처리
while(!feof($fp)) {
echo fgets($fp,128);
//처리한 데몬이 출력하여 파아프에 결과문자열올려놓음. 문자열의 마지막까지 128비트씩
//가져와서 화면에 출력
}
fclose ($fp);
//소켓파이프 연결제거
}
**GET / HTTP/1.0rnHost: 에서 /는 해당페이지의 초기페이지를 의미하며 임의의
페이지를 원할시는 /goods_list.php or http://www.webprogram.co.kr/goods_lsit.php
으로 지정하면 됩니다.**
[소켓을 이용해서 pop3서버 접근하기]
fp=@fsockopen(\"www.webprogram.co.kr\",110,error,errorstr,30);
echo fp;
if(!fp){
echo \"Socket Connect Error - error(errorstr)\";
}else{
echo \"Socket Connect Success\";
fputs(fp,\"user web_junsikn\");
fputs(fp,\"pass ysarahan\");
fputs(fp,\"listn\");
buf=fgets(fp,255);
msg=0;
echo buf
}
fclose(fp);
[fopen과 fsockopen차이]
둘다 파일을 제어하지만 fopen은 http://로 시작하는 파일에 대해서는 실패하는 경우가 많다.
fopen이 실패하는 경우는 버그가 아니라 fopen이 헤더정보를 HTTP 1.0으로 요청하기 때문이다
HTTP 1.1이면 실패한다. fopen은 단순히 로컬 파일에 사용하며 fsockopen은 원격파일에 접근
할때사용한다
fsockopen으로 타싸이트 로그인하는 방법 좀 알려주시면 감사할께요..
어떻게 해야.. 로그인인 되나요
번거럽지만 간단한 소스도 올려줬으면 감사합니다..
아직 초보라 글은 이해하기 힘들어서요.. ㅜ.ㅡ
행복한고니 05-01-31 10:54
HTTP 헤더에 대한 이해가 있어야할겁니다.
간단한 예제 하나 올려드리지요. 계속 로그인한 상태로 쓰는 건 아니고... 단지 로그인만 하는 예제입니다.
로그인할 페이지가 http://www.test.com/ver2/login.php 이고
login.php?id=uesr&pass=pass 의 방법으로 로그인이 된다고 하면...
$fp = fsockopen('www.test.com', 80);
$header = \"GET /ver2/login.php?id=user&pass=passrn\";
fputs($fp, $header);
while (!feof($fp))
{
echo fgets($fp, 1024);
}
fclose($fp);
나머지는 스스로 응용해보세요.
흑심품은연필 05-01-31 15:11
로그인을 쿠키로 구현했느냐 세션으로 구현했느냐에 따라서,
저 HTTP 헤더를 서버에 날려줘야 합니다 www.php.net 에 가셔서 화일소켓을 검색하시면 외국인들이 댓글로 달아놓은것이 있습니다 거기서 소스를 분석해 보세요 ^^
소켓 연결(fsockopen함수 이용)
※ 소켓연결은 \"telnet 호스트주소 포트번호\"명령과 같은 역할을 한다.
기본 문법(Header문과 Body문을 모두 가져온다.)
<?
$port = 80;
$address = \"ysaraha.ttongfly.net\";
//## IP또는 도메인만 가능하며 http://과 파일명은 빼고 입력한다. ##//
$out1 = \"GET / HTTP/1.0rnrn\";
$fp = @fsockopen ($address, $port, $errno, $errstr, 30);
if ($fp)
{
echo \"<b>정상 사이트</b><br>\";
fputs ($fp, $out1);
while (!feof($fp))
{
echo fgets ($fp,128);
}
fclose ($fp);
}
?>
기본문법(Body문만 가져온다.)
<?
$address = \"ttongfly.net\";
$port = 80;
$out = \"GET / HTTP/1.0rnrn\";
$fp = @fsockopen($address,$port,$errno,$errstr,15);
usleep(50);
if($fp)
{
echo \"#### 80 포트 연결 성공 ####\";
echo \"<br>\";
socket_set_timeout($fp, 30);
fwrite($fp, $out);$body = FALSE;
while(!feof($fp))
{
$buffer = fgets($fp, 128);
if($body == TRUE) $content .= $buffer;
//# 내용문 문자열 시작 #//
if($buffer==\"rn\") $body = true;
}
echo $content;
fclose($fp);
}
else
{
echo \"#### 80 포트 연결 실패 ####\";
}
?>
기본 문법
<?
define(\"_IP\", \"219.253.165.66\");
define(\"_PORT\", \"65000\");
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0)
{
echo \"n 소켓 생성 에러...n\";
exit;
}
$result = socket_connect($socket, _IP, _PORT);
if ($socket < 0)
{
echo \"n 소켓 연결 에러 : \".socket_strerror($result).\"n\";
}
$ntest = 3;
$strmsg = \"abcde\";
$msg = $ntest.$strmsg;
$sw = socket_write($socket, $msg, strlen($msg));
if($sw < 0)
{
echo \"n 서버에 메세지 전송이 실패 하였습니다. Error : \".socket_strerror($result).\"n\";
@socket_close($socket);
exit;
}
/*
에~ 또 이걸 할라는 의의는요.
제 pc (winsock 서버로 설정)
호스팅 서버 (winsock 클라이언트)
글이 등록되면 소켓으로 제 pc 에 데이터를 쏴줄려고 합니다.
바로바로 확인할수있게 ^^;
*/
?>
- 이전글linux find grep 찾기 명령어 20.02.21
- 다음글Memcached 설치 및 사용 방법 (2012-09-13) 20.02.21
댓글목록
등록된 댓글이 없습니다.