Skip to content

Instantly share code, notes, and snippets.

@phackwer
Last active July 18, 2017 09:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save phackwer/713ee1a11a8a4e5340715ea8f1ca8d7f to your computer and use it in GitHub Desktop.
Save phackwer/713ee1a11a8a4e5340715ea8f1ca8d7f to your computer and use it in GitHub Desktop.
PHP Socket listener
<?php
$listening = true;
$ip = '0.0.0.0';
$port = 9679;
$server = stream_socket_server("tcp://{$ip}:{$port}", $errno, $errstr);
$w = $e
= [];
if (!$server) {
return false;
}
while ($listening) {
while ($stream = @stream_socket_accept($server, 3, $peer)) {
while ($listening) {
stream_set_blocking($stream, 0);
$sock_in_data = '';
while (!strstr($sock_in_data, "\n")) {
$sock_in_data .= fread($stream, 1);
}
//log.txt
$log = 'RECV: ' . date('Y-m-d H:i:s') . ' ' . $peer . ' - ' . $sock_in_data;
file_put_contents('log_received.txt', $log, FILE_APPEND | LOCK_EX);
echo $log;
//if (!strstr($sock_in_data, 'Q0')) {
$sock_out_data = substr($sock_in_data, 0, 25);
//$sock_out_data .= date('ymdHis').",L0,0#\n";
$sock_out_data .= date('ymdHis').",D0#\n";
//$sock_out_data .= date('ymdHis').",S8,10,0#\n";
//$sock_out_data .= date('ymdHis').",G0#\n";
$sock_out_data = str_replace('*CMDR','*CMDS',$sock_out_data);
//Attempt format 1
$sock_out_data1 = hex2bin(strtoupper('FFFF'.bin2hex($sock_out_data)));
//log.txt
//Send to client:
if ((int) fwrite($stream, $sock_out_data1) < 1) {
trigger_error("Write to socket failed!");
}
$log = 'SEND: ' . date('Y-m-d H:i:s') . ' ' . $peer . ' - ' . $sock_out_data1;
file_put_contents('log_sent.txt', $log, FILE_APPEND | LOCK_EX);
echo $log;
//}
}
}
}
<?php
$port = 9679;
$socket = stream_socket_server("tcp://0.0.0.0:{$port}", $errno, $errstr);
if (!$socket) {return false;}
while (1) {
while ($conn = @stream_socket_accept($socket, 60, $peer)) {
stream_set_blocking($conn, 0);
$client_request = "";
while (!strstr($client_request, "\n")) {
$client_request .= fread($conn, 1);
}
$client_request = date('Y-m-d H:i:s') . ' ' . $peer . ' - ' . $client_request;
//log.txt
file_put_contents('log.txt', $client_request, FILE_APPEND | LOCK_EX);
//cli
echo $client_request;
//Send to client:
if (strstr($client_request, 'GET /')) {
$headers = "HTTP/1.0 200 OK\n"
. "Content-Type: text/html\n"
. "\n";
$body = "<h1>Greetings. You've reached our server!</h1>" . $client_request;
$client_request = $headers.$body;
}
if ((int) fwrite($conn, $client_request) < 1) {
trigger_error("Write to socket failed!");
}
stream_socket_shutdown($conn, STREAM_SHUT_WR);
fclose($conn);
fclose($socket);
$socket = stream_socket_server("tcp://0.0.0.0:{$port}", $errno, $errstr);
}
}
<?php
$listening = true;
$ip = '0.0.0.0';
$port = 9679;
$server = stream_socket_server("tcp://{$ip}:{$port}", $errno, $errstr);
$w = $e
= [];
if (!$server) {
return false;
}
while ($listening) {
while ($stream = @stream_socket_accept($server, 3, $peer)) {
stream_set_blocking($stream, 0);
$processId = pcntl_fork();
switch ($processId) {
case -1:
print "Could not fork!\n";
exit;
case 0:
echo $processId;
if (is_resource($stream)) {
$sock_in_data = '';
while (!strstr($sock_in_data, "\n") && !stream_get_meta_data($stream)['eof']) {
$sock_in_data .= fread($stream, 1);
}
//log.txt
$log = 'RECV: ' . date('Y-m-d H:i:s') . ' ' . $peer . ' - ' . $sock_in_data;
file_put_contents('log_unlock.txt', $log, FILE_APPEND | LOCK_EX);
echo $log;
$sock_out_data = substr($sock_in_data, 0, 38);
$sock_out_data .= "L0,0#\n";
//log.txt
//Send to client:
if ((int)fwrite($stream, $sock_out_data) < 1) {
trigger_error("Write to socket failed!");
}
$log = 'SEND: ' . date('Y-m-d H:i:s') . ' ' . $peer . ' - ' . $sock_out_data;
file_put_contents('log_multi_streams_fork.txt', $log, FILE_APPEND | LOCK_EX);
echo $log;
stream_socket_shutdown($stream, STREAM_SHUT_WR);
fclose($stream);
unset($stream);
}
}
break;
}
}
@phackwer
Copy link
Author

phackwer commented Jun 28, 2017

Sample generated log.txt file:

2017-06-28 12:31:07 89.101.87.230:35456 - test
2017-06-28 12:31:11 89.101.87.230:27467 - asdf
2017-06-28 12:31:26 89.101.87.230:47658 - This realy receives a connection and close after EOL!

@phackwer
Copy link
Author

phackwer commented Jul 4, 2017

2017-07-04 11:42:51 10.0.0.2:63172 - *CMDR,OM,865503037351175,000000000000,Q0,379#
2017-07-04 11:43:04 10.0.0.2:51015 - *CMDR,OM,865503037351175,000000000000,Q0,379#
2017-07-04 11:43:15 10.0.0.2:62552 - *CMDR,OM,865503037351175,000000000000,Q0,379#
2017-07-04 11:43:27 10.0.0.2:65206 - *CMDR,OM,865503037351175,000000000000,Q0,379#
2017-07-04 11:43:39 10.0.0.2:51200 - *CMDR,OM,865503037351175,000000000000,Q0,379#
2017-07-04 11:43:52 10.0.0.2:53491 - *CMDR,OM,865503037351175,000000000000,Q0,379#
2017-07-04 11:44:04 10.0.0.2:57370 - *CMDR,OM,865503037351175,000000000000,Q0,379#
2017-07-04 11:44:16 10.0.0.2:57613 - *CMDR,OM,865503037351175,000000000000,Q0,379#
2017-07-04 11:44:28 10.0.0.2:65444 - *CMDR,OM,865503037351175,000000000000,Q0,379#
2017-07-04 11:44:49 10.0.0.2:52913 - *CMDR,OM,865503037351175,000000000000,L0,0#
2017-07-04 11:45:01 10.0.0.2:51788 - *CMDR,OM,865503037351175,000000000000,L0,0#
2017-07-04 11:45:14 10.0.0.2:51864 - *CMDR,OM,865503037351175,000000000000,L0,0#
2017-07-04 11:45:27 10.0.0.2:50372 - *CMDR,OM,865503037351175,000000000000,L0,0#
2017-07-04 11:45:47 10.0.0.2:64126 - *CMDR,OM,865503037351175,000000000000,L0,0#
2017-07-04 11:46:00 10.0.0.2:52025 - *CMDR,OM,865503037351175,000000000000,L0,0#
2017-07-04 11:46:13 10.0.0.2:63926 - *CMDR,OM,865503037351175,000000000000,L0,0#
2017-07-04 11:46:28 10.0.0.2:57163 - *CMDR,OM,865503037351175,000000000000,L0,0#
2017-07-04 11:46:39 10.0.0.2:59590 - *CMDR,OM,865503037351175,000000000000,L0,0#
2017-07-04 11:46:52 10.0.0.2:58223 - *CMDR,OM,865503037351175,000000000000,L0,0#
2017-07-04 11:47:03 10.0.0.2:54317 - *CMDR,OM,865503037351175,000000000000,L0,0#
2017-07-04 11:47:14 10.0.0.2:64976 - *CMDR,OM,865503037351175,000000000000,L0,0#
2017-07-04 11:47:26 10.0.0.2:62219 - *CMDR,OM,865503037351175,000000000000,L0,0#
2017-07-04 11:47:37 10.0.0.2:52309 - *CMDR,OM,865503037351175,000000000000,L0,0#
2017-07-04 11:47:50 10.0.0.2:60088 - *CMDR,OM,865503037351175,000000000000,L0,0#
2017-07-04 11:48:01 10.0.0.2:58437 - *CMDR,OM,865503037351175,000000000000,L0,0#
2017-07-04 11:48:14 10.0.0.2:49158 - *CMDR,OM,865503037351175,000000000000,L0,0#
2017-07-04 11:48:25 10.0.0.2:64946 - *CMDR,OM,865503037351175,000000000000,L0,0#
2017-07-04 11:48:38 10.0.0.2:58944 - *CMDR,OM,865503037351175,000000000000,L0,0#
2017-07-04 11:48:49 10.0.0.2:56633 - *CMDR,OM,865503037351175,000000000000,L0,0#
2017-07-04 11:49:02 10.0.0.2:54678 - *CMDR,OM,865503037351175,000000000000,L0,0#
2017-07-04 13:15:04 10.0.0.5:51638 - GET / HTTP/1.1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment