КТвП    

  Задание на практику ~ 
  Доступ к осциллографу ~ 
  Проверка доступа ~ 
  Язык SCPI ~ 
  Справка по gnuplot ~ 
  Справка по GD ~ 
  Справка по Xlib ~ 
  Справка по SDL ~ 
/Студентам/КТвП/Проверка доступа
//$host_ip = '172.20.175.134'; //$host = 'mercury.phys.petrsu.ru'; $host_ip = '172.20.175.139'; $host = '5k-ip139.phys.petrsu.ru'; $port = 9999; /* oscillograms 'as are', in binary form */ $osclgrm1 = ""; $osclgrm2 = ""; /* oscillograph settings */ $settings = array ( 't_per_div' => "", 'v1_per_div' => "", 'v2_per_div' => "", ); function gds_used_by() { global $host; global $host_ip; global $port; $ssh = "/usr/bin/ssh "; $ssh_options = "-n -o StrictHostKeyChecking=no -i ./4them/ktvp/gds_key "; $user = "gds"; $cmd = $ssh.$ssh_options.$user."@".$host_ip." /bin/netstat -tn"; $a = exec($cmd, $connections, $ret); array_shift($connections); array_shift($connections); /* echo "
";
	echo $cmd."
"; print_r($connections); echo "
"; */ foreach ($connections as $conn) { if ( (strstr($conn, $host.":".$port)) || (strstr($conn, $host_ip.":".$port)) || (strstr($conn, "localhost:".$port)) || (strstr($conn, "127.0.0.1:".$port)) ) { // $c = split(" +", $conn); $c = explode(" +", $conn); // $addr = split(":", $c[4]); $addr = explode(":", $c[4]); $state = $c[5]; if ($state == "ESTABLISHED") return $addr[0]; }; }; return ""; } function gds_check($read_osc) { global $host; global $host_ip; global $port; global $osclgrm; global $settings; $request = "*idn?\n"; $expected_reply = "GW,GDS-840C,EE142162,V2.02\n"; $gds = @fsockopen($host_ip, $port, $errno, $errstr, 1.0); if (!$gds) { // echo "
";
//		echo "fsockopen(): err #".$errno."(".$errstr.")";
//		echo "
"; // implies "connection refused"... // errno: 110 - conn timeout, 111 - conn refused... return -2; }; fwrite($gds, $request); stream_set_timeout($gds, 3); $reply = ""; while (strlen($reply) < strlen($expected_reply)) { $reply .= fread($gds, 128); $info = stream_get_meta_data($gds); if ($info['timed_out']) break; } if ($info['timed_out']) { // echo "
";
		// print_r($info);
		// echo "
"; // выключен/повис/не подключен return -3; } if ($read_osc) { $cmd = "CHAN1:DISP 1\n"; fwrite($gds, $cmd); $cmd = "CHAN2:DISP 1\n"; fwrite($gds, $cmd); $cmd = ":RUN\n"; fwrite($gds, $cmd); $cmd = "TIMEBASE:SCALE?\n"; fwrite($gds, $cmd); $settings['t_per_div'] = fread($gds, 32); $cmd = "CHANNEL1:SCALE?\n"; fwrite($gds, $cmd); $settings['v1_per_div'] = fread($gds, 32); $cmd = "CHANNEL2:SCALE?\n"; fwrite($gds, $cmd); $settings['v2_per_div'] = fread($gds, 32); $cmd = "ACQUIRE1:POINT\n"; fwrite($gds, $cmd); // sleep(1); $osclgrm1 = ""; while (strlen($osclgrm1) < 1014) { $osclgrm1 .= fread($gds, 1014); //$info = stream_get_meta_data($gds); //if ($info['timed_out']) // break; } $f = fopen("/tmp/gds-o1", "w"); flock($f, LOCK_EX); fwrite($f, $osclgrm1, 1014); flock($f, LOCK_UN); fclose($f); $cmd = "ACQUIRE2:POINT\n"; fwrite($gds, $cmd); // sleep(1); $osclgrm2 = ""; while (strlen($osclgrm2) < 1014) { $osclgrm2 .= fread($gds, 1014); //$info = stream_get_meta_data($gds); //if ($info['timed_out']) // break; } $f = fopen("/tmp/gds-o2", "w"); flock($f, LOCK_EX); fwrite($f, $osclgrm2, 1014); flock($f, LOCK_UN); fclose($f); } fclose($gds); echo "
";
	// echo strlen($reply)."
"; // echo strlen($expected_reply)."
"; $r = $reply; $r{strlen($r)-1} = " "; echo "*IDN? : ".$r; if (strstr($reply, $expected_reply)) { echo "

(GOOD ANSWER)

"; } else { echo "

(BAD ANSWER)

"; }; echo "
"; return 1; }; function is_private_net($ip) { /* http://www.faqs.org/rfcs/rfc1918.html: 10.0.0.0 - 10.255.255.255 (10/8 prefix) 172.16.0.0 - 172.31.255.255 (172.16/12 prefix) 192.168.0.0 - 192.168.255.255 (192.168/16 prefix) */ $ip_bytes = explode(".", $ip); if ($ip_bytes[0] == '10') return true; if (($ip_bytes[0] == '192') && ($ip_bytes[1] == '168')) return true; if (($ip_bytes[0] == '172') && ( ($ip_bytes[1] & 0xF0)== '16')) return true; return false; } /* function show_osc() { global $osclgrm; if (!strlen($osclgrm)) return; echo "


"; echo strlen($osclgrm)."
"; echo "Header{}: ".$osclgrm{0}.$osclgrm{1}.$osclgrm{2}.$osclgrm{3}.$osclgrm{4}.$osclgrm{5}."\n"; $format = "A6id/fttt/C1chan/C3nnn/s500"; /// swap bytes in each sample for ($k = 0; $k < 1000; $k += 2 ) { $a = $osclgrm{$k+14}; $osclgrm{$k+14} = $osclgrm{$k+1+14}; $osclgrm{$k+1+14} = $a; }; echo $format."\n"; $data = unpack($format, $osclgrm); // if ($data['id'] != "#41008") { return; } print_r($data); echo "

"; // $osc_pic = imagecreate(500, 200); // imagepng($osc_pic); // imagedestroy($osc_pic); } */ //$visiter = '172.248.56.11'; $visiter = $_SERVER['REMOTE_ADDR']; if (!is_private_net($visiter)) { echo "



Данный раздел доступен только из внутренних сетей
(ваш IP : $visiter)




"; return; } // echo "

UNDER con_СtРАК_ШН, ага

"; $ckinfo_file = "/tmp/gds840c_ckinfo"; $cash_expire = 30; $t3 = "проверено "; $used_by = gds_used_by(); if (!empty($used_by)) { $gds_status = -4; $t3 .= date("Y.m.d в H час i мин s сек", time()); $last_host = $visiter; } else { $time = time(); $ckinfo = @file($ckinfo_file); $last_chked = $ckinfo[0]; $gds_status = $ckinfo[1]; $last_host = $ckinfo[2]; if (($time - $last_chked) > $cash_expire) { $last_chked = $time; $gds_status = gds_check($_POST['show_osc']); $last_host = $visiter; $f = fopen($ckinfo_file, "w"); flock($f, LOCK_EX); fwrite($f, $last_chked."\n"); fwrite($f, $gds_status."\n"); fwrite($f, $last_host."\n"); flock($f, LOCK_UN); fclose($f); $t3 .= date("Y.m.d в H час i мин s сек", $last_chked); } else { $t3 .= date("Y.m.d в H час i мин s сек", $last_chked)."
(кэшированное значение, период устаревания данных в кэше - $cash_expire сек)"; }; } $t3 .= "
с узла $last_host
(ваш IP - $visiter)"; if (1 == $gds_status) { $t = "доступен
"; $color = 'green'; } else { $t = "недоступен
"; $t1 = "
наиболее вероятная причина:
"; $color = 'red'; switch ($gds_status) { case -1: $t1 .= "внутренняя ошибка, возможно,
на самом деле осциллограф доступен"; break; case -2: $t1 .= "не запущен сервер"; break; case -3: $t1 .= "выключен/не подключен/повис/не ответил"; break; case -4: $t1 .= "используется с узла ".$used_by; break; } }; echo "


В данный момент осциллограф

\n"; echo "
$t
\n"; echo "
$t1
\n"; echo "

$t3
\n"; if (!empty($_POST['show_osc'])) { if ("ato" == ($_POST['show_osc'])) { echo "
\n
\n \"[\n
\n
\n "; //print_r($settings); echo "
Легенда: жёлтенькое - канал 1, зелёненькое - канал 2
Цена деления по оси времени: ".trim($settings['t_per_div'])."
Цена деления по оси напряжений, канал 1: ".trim($settings['v1_per_div'])."
Цена деления по оси напряжений, канал 2: ".trim($settings['v2_per_div'])."
"; } } /* if (1 == $_POST['chan']) $opt1 = ""; else $opt1 = ""; if (2 == $_POST['chan']) $opt2 = ""; else $opt2 = ""; */ echo "
Показать осциллограммы

"; ?>
/Студентам/КТвП/Проверка доступа

Содержимое данного сайта может быть использовано кем угодно, когда угодно, как угодно и для каких угодно целей. Автор сайта не несёт абсолютно никакой ответственности за землетрясения, наводнения, финансовые кризисы, глобальные потепления/похолодания, разбитые тарелки, зуд/онемение в левой/правой пятке читателя, эпидемии/пандемии свинячьего/птичьего/тараканьего и иных гриппов, а также за прочие негативные, равно как и позитивные, последствия, вызванные прямым или косвенным использованием материалов данного сайта кем бы то ни было, включая самого автора. При копировании/цитировании материалов данного сайта любым технически возможным в настоящее время способом, а также способом, могущим стать возможным в будущем, указание (либо неуказание) ссылки на первоисточник лежит, блин, тяжким грузом на совести копирующего/цитирующего.

Valid HTML 4.0 Strict Valid CSS!