cari
Rumahphp教程php手册在php上使用fork以及socket的sample

在php上使用fork以及socket的sample

Jun 13, 2016 am 10:34 AM
forkphpsocketatasangunawujuddaripadaberjumpa

最近剛好遇到一個頭大的問題寫了這個code讓大家參考一下吧
家裏的無線AP功能不太好,他只提供把外部真實IP map 到 Nat裡面的某個IP
不能指定某個port map到某個內部IP的Port
可是我已經把外部的IP Map到內部的Linux);" href="javascript:;" target=_self>Linux Server上,
但是我又想從外部使用VNC連到內部的一台Windows電腦。
所以就寫了這個程式
原理是這樣

這個程式會在Linux Server上開一個Port作Listen的動作
當外部連到這個Port時,程式會再開啟另一個連線連到內部Windows的VNC上
把外部的封包原封不動的丟到VNC的連線上,然後把VNC連線傳回的資料原封不動的再丟回外部的Port

程式碼:
<br><font face="NSimsun">#!/usr/bin/php -q<br></font><font color="#000000"><font face="NSimsun"><font color="#0000bb"><?php <BR> $IP</font><font color="#007700">=</font><font color="#dd0000">192.168.1.1</font><font color="#007700">;</font></font><font face="NSimsun"><font color="#ff8000">//Windows電腦的IP<br> </font><font color="#0000bb">$Port</font><font color="#007700">=</font><font color="#dd0000">5900</font><font color="#007700">;        </font></font><font face="NSimsun"><font color="#ff8000">//VNC使用的Port<br> </font><font color="#0000bb">$ServerPort</font><font color="#007700">=</font><font color="#dd0000">9999</font><font color="#007700">;</font></font><font face="NSimsun"><font color="#ff8000">//Linux Server對外使用的Port<br> </font><font color="#0000bb">$RemoteSocket</font><font color="#007700">=</font><font color="#0000bb">false</font><font color="#007700">;</font></font><font face="NSimsun"><font color="#ff8000">//連線到VNC的Socket<br> </font><font color="#007700">function</font><font color="#0000bb">SignalFunction</font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#40;$Signal)<br> </font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#123;<br>   //這是主Process的訊息處理函數<br>  </font><font color="#007700">global</font><font color="#0000bb">$PID</font><font color="#007700">;</font></font><font face="NSimsun"><font color="#ff8000">//Child Process的PID<br>  </font><font color="#007700">switch &</font></font><font face="NSimsun"><font color="#ff8000">#40;$Signal)<br>  </font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#123;<br>   </font><font color="#007700">case</font><font color="#0000bb">SIGTRAP</font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#58;<br>   </font><font color="#007700">case</font><font color="#0000bb">SIGTERM</font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#58;<br>    //收到結束程式的Signal<br>    </font><font color="#007700">if&</font></font><font face="NSimsun"><font color="#ff8000">#40;$PID)<br>    </font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#123;<br>     //送一個SIGTERM的訊號給Child告訴他趕快結束掉嘍<br>     </font><font color="#0000bb">posix_kill</font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#40;$PID,SIGTERM);<br>     //等待Child Process結束,避免zombie<br>     </font><font color="#0000bb">pcntl_wait</font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#40;$Status);<br>    </font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#125;<br>    //關閉主Process開啟的Socket<br>    </font><font color="#0000bb">DestroySocket</font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#40;);<br>    </font><font color="#007700">exit&</font></font><font face="NSimsun" color="#ff8000">#40;0); //結束主Process<br>    </font><font face="NSimsun"><font color="#007700">break;<br>   case</font><font color="#0000bb">SIGCHLD</font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#58;<br>    /*<br>當Child Process結束掉時,Child會送一個SIGCHLD訊號給Parrent<br>當Parrent收到SIGCHLD,就知道Child Process已經結束嘍 ,該做一些<br>結束的動作*/<br>    </font><font color="#007700">unset&</font></font><font face="NSimsun"><font color="#ff8000">#40;$PID); //將$PID清空,表示Child Process已經結束<br>    </font><font color="#0000bb">pcntl_wait</font><font color="#007700">&</font></font><font face="NSimsun" color="#ff8000">#40;$Status); //避免Zombie<br>    </font><font face="NSimsun" color="#007700">break;<br>   default&</font><font face="NSimsun"><font color="#ff8000">#58;<br>  </font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#125;<br> </font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#125;<br> </font><font color="#007700">function</font><font color="#0000bb">ChildSignalFunction</font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#40;$Signal)<br> </font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#123;<br>//這是Child Process的訊息處理函數<br>  </font><font color="#007700">switch &</font></font><font face="NSimsun"><font color="#ff8000">#40;$Signal)<br>  </font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#123;<br>   </font><font color="#007700">case</font><font color="#0000bb">SIGTRAP</font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#58;<br>   </font><font color="#007700">case</font><font color="#0000bb">SIGTERM</font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#58;<br>//Child Process收到結束的訊息<br>    </font><font color="#0000bb">DestroySocket</font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#40;); //關閉Socket<br>    </font><font color="#007700">exit&</font></font><font face="NSimsun"><font color="#ff8000">#40;0); //結束Child Process<br>   </font><font color="#007700">default&</font></font><font face="NSimsun"><font color="#ff8000">#58;<br>  </font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#125;<br> </font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#125;<br> </font><font color="#007700">function</font><font color="#0000bb">ProcessSocket</font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#40;$ConnectedServerSocket)<br> </font><font color="#007700">&</font></font><font face="NSimsun"><font color="#ff8000">#123;<br>  //Child Process Socket處理函數<br>  //$ConnectedServerSocket -> 外部連進來的Socket<br>  </font><font color="#007700">global</font><font color="#0000bb">$ServerSocket</font><font color="#007700">,</font><font color="#0000bb">$RemoteSocket</font><font color="#007700">,</font><font color="#0000bb">$IP</font><font color="#007700">,</font><font color="#0000bb">$Port</font></font><font face="NSimsun"><font color="#007700">;<br>  </font><font color="#0000bb">$ServerSocket</font><font color="#007700">=</font><font color="#0000bb">$ConnectedServerSocket</font></font><font face="NSimsun" color="#007700">;<br>  declar						
</font></font>

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular