How to send mikrotik command result to php - php

I have created a script and a php file where it will fetch a certain link to get the public address of the mikrotik address.
I can send a plain text(in this instancem "tester"), but I cant send the result from mikrotik([/system identity print]).
Here is the file:
mikrotik script:
:global name [/system identity print]
:global lock "tester"
# put it all together ----------------------------------------------------
:set $str "key=$lock&namepr=$name"
# send to server ---------------------------------------------------------
:do {
:put "Checking in";
/tool fetch mode=https keep-result=no http-method=post url="https://sc.glcnetworks.com:63010/scriptcase/app/glcbilling/receive_monitoring_from_host/\?$str" http-data=$str ;
:put "Data sended successfully";
} on-error={ log warning "Greeter: Send to server Failed!" }
php file from scriptcase:
#get hostname,ip public and key from mikrotik
$hostname_get = $_GET['namepr'];
$key_get = $_GET['key'];
$remote = $_SERVER['REMOTE_ADDR'];
// Check for record
$check_sql = "SELECT id,hostname"
. " FROM glc_host"
. " WHERE hostname = '$hostname_get'";
sc_lookup(rs, $check_sql);
// Check for record
$check_sql2 = "SELECT key,value"
. " FROM bas_config"
. " WHERE key = 'mikrotik_secrets_$hostname_get'";
sc_lookup(ls, $check_sql2);
$id = isset({rs[0][0]});
// Check for record, to record public IP changes or new public ip changes
$check_sql3 = "SELECT *"
. " FROM glc_host_monitoring"
. " WHERE host_id = '$id'";
sc_lookup(ms, $check_sql3);
#to check for mikrotik output, i send the result to activity log
sc_log_add("test", "$key_get and $hostname_get");
#if key and hostname match from database
if (isset({rs[0][1]}) && isset({ls[0][1]})){
# if record exist
if(isset({rs[0][0]})== isset({ms[0][1]})){
// echo "yes" ;
#no change happen
if($ms[0][5]== $remote){
// echo "ok";
exit();
#ip public changed
}else{
echo "update";
$update_table = 'glc_host_monitoring'; // Table name
$update_where = "host_id = '$id' "; // Where clause
$update_fields = array( // Field list, add as many as needed
"ip_address_public = '$remote'",
);
// Update record
$update_sql = 'UPDATE ' . $update_table
. ' SET ' . implode(', ', $update_fields)
. ' WHERE ' . $update_where;
sc_exec_sql($update_sql);
}
}else{
#if record does not exist
$insert_table = 'glc_host_monitoring'; // Table name
$insert_fields = array( // Field list, add as many as needed
'host_id' => "'$id'",
'ip_route' => "'NULL'",
'ip_address' => "'NULL'",
'interface' => "'NULL'",
'ip_address_public' => "'$remote'",
);
// Insert record
$insert_sql = 'INSERT INTO ' . $insert_table
. ' (' . implode(', ', array_keys($insert_fields)) . ')'
. ' VALUES (' . implode(', ', array_values($insert_fields)) . ')';
sc_exec_sql($insert_sql);
}
}else{
#key and hostname not matched
echo "failed";
}
I have searched everywhere but I dont find the right answer, please tell me whats wrong with my file, Im new with mikrotik scripting.

Try it another way. Let server ask for info and then store it in DB
https://wiki.mikrotik.com/wiki/API_PHP_package
<?php
use PEAR2\Net\RouterOS;
$client = new RouterOS\Client('192.168.88.1', 'admin', 'password');
$util = new RouterOS\Util($client);
$util->setMenu('/system identity')->get('name'); # Just guessing
...

Related

Memcached not working in web browser,but use php command working

I have testMemcached.php code below.
<?php
include_once "common.php";
include_once "api.php";
class TestMemcached extends API{
function impl(){
$m = $this->getMem();
$stats = $m->getStats();
var_dump($stats);
$m->add("Key","test");
echo "Value:".$m->get("Key");
}
}
$api = new TestMemcached();
$api->go();
I run testMemcached.php in the web browser. I get bool(false) Value:.
I run php -f testMemcached.php command then get the output below.
array(1) {
["localhost:11211"]=>
array(24) {
["pid"]=>
int(10218)
....(skip)
["version"]=>
string(6) "1.4.15"
}
}
Value:test
I don't know what the difference is and
how to fix memcached not working in the web browser.
My environment:CentOS 7. LNMP.
2018/05/23 Update :
I use telnet 127.0.0.1 11211 to test memcached function
I found the add and set is not working.
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set test testValue
ERROR
add test testValue
ERROR
get test
END
This is my memcached setup from phpinfo below.
I use getResultCode() code below to find some error
This is my test result output.
MemcachedFunction ResultCode ErrorDescription
stats 3 MEMCACHED_CONNECTION_FAILURE
set 3 MEMCACHED_CONNECTION_FAILURE
add 47 MEMCACHED_SERVER_TEMPORARILY_DISABLED
get 47 MEMCACHED_SERVER_TEMPORARILY_DISABLED
fetchAll 16 MEMCACHED_NOTFOUND
My Test Code is here. Output is in comments.
<?php
include_once 'vendor/autoload.php';
$m = new Memcached();
$m->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
$m->addServer("localhost","11211");
$stats = $m->getStats();
echo "stats ".$m->getResultCode()."<br>"; // stats 3
var_dump($stats); // bool(false)
echo "<br>";
$m->set("Key","test");
echo "set ".$m->getResultCode()."<br>"; // set 3
$m->add("Key","test");
echo "add ".$m->getResultCode()."<br>"; // add 47
echo "Value:".$m->get("Key")."<br>"; // Value:
echo "get ".$m->getResultCode()."<br>"; // get 47
var_dump($m->fetchAll()); // bool(false)
echo "<br>";
echo "fetchAll ".$m->getResultCode()."<br>"; // fetchAll 16
var_dump($m->getAllKeys()); // bool(false)
I faced alittle similiar issue once.
In my case using ip address instead of 'localhost' worked.
$cache_server_host = '12*.45*.***.***';// Your server's ip address here.
$cache_server_port = 11211;
$cache_obj = NULL;
$is_cache_available = FALSE;
try {
if (class_exists('Memcache')) {
$cache_obj = new Memcache;
$is_cache_available = $cache_obj->connect($cache_server_host, $cache_server_port);
};
}
catch (Exception $e) {}
if (!empty($is_cache_available)) {
// Ok to use the cache;
// i.e.- $cache_obj->set($key, $val, ...);
}
Yes, this issue is related with IP vs hostname. I faced the same issue with official Memcached docker . it was not working with 'localhost' or 127.0.0.1 but when tested with DNS name or container IP it worked.
<?php
/**
* #license MIT License
* #copyright maartendekeizer
*/
$memcached = new Memcached();
$memcached->addServer('memcached', 11211);
$name = 'testkey';
$ttl = 10;
$data = sha1(time());
$memcached->set($name, $data, $ttl);
echo date('His') . ': key "' . $name . '" set to "' . $data . '" with ttl ' . $ttl . PHP_EOL;
for ($i = 0; $i < ($ttl + 5); $i ++) {
$res = $memcached->get($name);
echo date('His') . ': key "' . $name . '" data is "' . $res . '" and that is ' . ($res == $data ? 'a match' : 'not a match') . PHP_EOL;
sleep(1);
}

PHP - Login via form and grab cookie

I'm trying to login to the following URL: pitangui.amazon.com
I have tried using cURL as well as libraries like https://barebonescms.com/documentation/ultimate_web_scraper_toolkit/
However, I'm getting the following error using the webscraper via Amazon:
This is my PHP code:
<?php
require_once "support/http.php";
require_once "support/web_browser.php";
require_once "support/simple_html_dom.php";
$url = "https://pitangui.amazon.com";
$web = new WebBrowser(array("extractforms" => true));
$result = $web->Process($url);
if (!$result["success"]) echo "Error retrieving URL. " . $result["error"] . "\n";
else if ($result["response"]["code"] != 200) echo "Error retrieving URL. Server returned: " . $result["response"]["code"] . " " . $result["response"]["meaning"] . "\n";
else
{
$form = $result["forms"][0];
$form->SetFormValue("email", "myemail#gmail.com");
$form->SetFormValue("password", "mypass");
$result2 = $form->GenerateFormRequest("signIn");
$result = $web->Process($result2["url"], "auto", $result2["options"]);
if (!$result["success"]) echo "Error retrieving URL. " . $result["error"] . "\n";
else if ($result["response"]["code"] != 200) echo "Error retrieving URL. Server returned: " . $result["response"]["code"] . " " . $result["response"]["meaning"] . "\n";
else
{
// Do something with the results page here...
print_r($result);
}
}
?>
I'm first trying to get the login working, then I will grab the cookie via $_SERVER['Cookie']
add
$form->SetFormValue("create","0");

this is a chat box design displaying the sender and receiver messages

Basically, this code works but it displays both the sender and receiver in the same color
what do i want? i want the sender colour to be different with the receiver message color
<?php
require_once 'cn.php';
session_start(); // startsession .line17 (username || usernameto='.$username.')
//messages sent or received by the $_SESSION or $_GET["ident"]..line 26
require_once 'protect.php';
$username=$_SESSION['UserID'];
$fiveMinutesAgo = time() - 1000;
$to=$_SESSION['UserTo'];
$sql = 'SELECT
username, message_content,message_file, message_time,usernameto
FROM
messages
WHERE
message_time > ' . $fiveMinutesAgo . '
and ((username='.$username.'
and usernameto='.$to.') or (usernameto='.$username.'
and username='.$to.'))
ORDER BY
message_time';
$result = mysql_query($sql, $cn) or
die(mysql_error($cn));
//mysql_query ("Update messages set message_file= replace(message_file,' ','');
while ($row = mysql_fetch_assoc($result)) {
$hoursAndMinutes = date('g:ia', $row['message_time']);
$mycontent=$row['message_content'];
$myfile=$row['message_file'];
$playfile="<A href=upload/$myfile> $myfile </A>";
/*************************************************************************************************/
echo '<i><p style="font-family:arial;color:purple;font-size:15px;"><strong>' . $row['username']. '</strong>: <em>(' . $hoursAndMinutes . ')</em> ' . $playfile . $mycontent.'</i></p>';
}
?>
Assuming that $username and your column username contains a userID: Check if $username is the same as $row['username']. If it is, your message is from the sender.
if ($row['username'] == $username)
$color = 'red';
else
$color = 'purple';
echo '<i><p style="font-family:arial;color:'.$color.';font-size:15px;"><strong>' . $row['username']. '</strong>: <em>(' . $hoursAndMinutes . ')</em> ' . $playfile . $mycontent.'</i></p>';
Also: This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information.
http://www.php.net/manual/en/function.mysql-query.php
you need to know when the sendername is the same people who has the session open if the sendername else is the receiver

Inserting PHP and XML into MYSQL

I am using the below code to draw data from our service provider for LBS. What i am trying to do is also load this information that i receive into mysql.
Using this code I am not getting any errors, and the location and map API's are working great but it is not placing the data drawn into mysql at all.
<?php
function parseXML($fstr,$tstr_start,$tstr_end) {
if ( ! strstr($fstr,$tstr_start) || !strstr($fstr,$tstr_end) ){
return ;
}
$start = strpos($fstr,$tstr_start) + strlen($tstr_start);
$stop = strpos($fstr,$tstr_end, $start);
$length = $stop - $start;
return trim(substr($fstr, $start, $length));
}
define ("MAP_API_KEY","***");
define ("MAP_BASE_URL","http://maps.googleapis.com/maps/api/staticmap?");
$Data = $GLOBALS["HTTP_RAW_POST_DATA"];
//--- Get XML data into variables
$DataAry['ResponseType'] = parseXML($Data,'Response Type="','"');
$DataAry['RefNo'] = parseXML($Data,'RefNo="','"');
$DataAry['SeqNo'] = parseXML($Data,'SeqNo="','"');
$DataAry['Network'] = parseXML($Data,'<NetworkID>','</NetworkID>');
$DataAry['Lat'] = (int) parseXML($Data,'<Lat>','</Lat>');
$DataAry['Lon'] = (int) parseXML($Data,'<Lon>','</Lon>');
$DataAry['Accuracy'] = parseXML($Data,'<Accuracy>','</Accuracy>');
$DataAry['DateTime'] = parseXML($Data,'<DateTime>','</DateTime>');
$DataAry["Lat"] = $DataAry['Lat']/1000000;
$DataAry["Lon"] = $DataAry["Lon"]/1000000;
$con = mysql_connect("localhost","****","****");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("****", $con);
$sql="INSERT INTO trace (Lat, Lon, DateTime, RefNo)
VALUES
('$_POST[Lat]','$_POST[Lon]','$_POST[DateTime]','$_POST[RefNo]')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
// ---Create link to map
$link = MAP_BASE_URL . "center={$DataAry['Lat']},
{$DataAry['Lon']}&zoom=15&size=500x500&key=" . MAP_API_KEY . "&sensor=true&markers=
{$DataAry['Lat']},{$DataAry['Lon']}";
$handle = fopen("requests.php","c");
fwrite($handle, "<br/>Location Request # ". date("Y-m-d H:i:s") . "<br/><textarea
style='width:500px;height:200px' readonly>" . $GLOBALS["HTTP_RAW_POST_DATA"] . "
</textarea><br/><img style='border:1px solid #000;width:500px;height:500px'
src='$link'/><hr/>");
fclose ($handle);
echo "done!";
?>
It does however throw it into the requests.php page as requested but i need to extract the info into msql
The first problem is that there are no quotes around your string key indexes for your $_POST array. You might want to put !mysql_query($sql,$con) in a try-catch to see if you catch any errors then. Also the use of mysql_* functions in PHP is deprecated and should not be used anymore. Because you are using the mysql_* functions, you are also vulnerable to SQL-injections.

Echo not printed on page using php

I am trying to create a web page using php. The problem is that sometimes I get server errors and sometime I get nothing in return at all. At one point the server changed the file type itself. I have NO idea what the problem can be.
And since I have actually no idea what the problem is I paste the entire file here, even though I expect that it's the first few rows that is the problem (I put it here: http://www.iandapp.com/smic/subscription.php) :
<?php header('Content-Type: text/html; charset=ISO-8859-1');
echo("<div id='subscribe'>");
$mail = $_POST['email1'];
//Set the locale format, etc. of date and time
date_default_timezone_set('Europe/Stockholm');
setlocale(LC_TIME, "sv_SV");
//Create the db-connection
$mysqli = mysqli_connect("mydb", "myuser", "mupsw", "myschema", "3306");
//If verifying the subscription, makse sure the db is updated accordingly
if($_GET['newid'] != ""){
//Make the subscriber a verified subscriber
$result = mysqli_query($mysqli,"UPDATE users SET subscriber = 1 WHERE id = " . $_GET['newid']);
if($result){
echo("<p>Welcome to our newsletter! We will send you information about any new application or update. This will not happen too often, but once it does we hope you will have the opportunity to look into our site again.<p/>");
echo("<p><br/>If you wish to unsubscribe from this mail-list, please visit out subscription page: http://" . $_SERVER['HTTP_HOST'] . "/subscription.php <p/>");
}else{
echo("<p>Somthing went wrong, please click the link again!<p/>");
}
}elseif($_POST['email1'] != ""){ //Only do things if there is an e-mail posted
//Make sure the ID is unique
do{
$rand_int = rand(100000000, 999999999);
$result = mysqli_query($mysqli, "SELECT id FROM users WHERE id = " . $rand_int);
$no_of_rows = mysqli_num_rows($result);
}while($no_of_rows != 0);
echo("RAND :".$rand_int);
//Create query for saving the new user e-mail
$query = "INSERT INTO users(id, email, first_name, surname) VALUES ('" . $rand_int . "', '".$_POST['email1']."', '". $_POST['first_name']."','".$_POST['surname']."')";
$re = mysqli_query($mysqli, $query);
echo("Result: ".$re);
//Check if mail already exist (Error code 1062 = dublicate entries for unique fields)
$existing = 0;
if(mysqli_errno($mysqli)==1062){
echo("It seems like your e-mail already is registered. Perhaps you have been a subscriber earlier? By clicking the link that you will receive in your mail box you subscribe to the newsletter again. ");
$existing = 1;
$result = mysqli_query($mysqli,"SELECT id FROM users WHERE email = '" . $_POST['email1'] . "'");
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
$rand_int = $row['id'];
mysqli_query($mysqli,"UPDATE users SET waiting_for_unsubscribe = 0 WHERE email = '" . $_POST['email1'] . "'");
if(mysqli_errno($mysqli)){
echo("Error code " . mysqli_errno($mysqli) . "<br/>");
echo("Error text " . mysqli_errno($mysqli) . "<br/>");
}
//echo("ID------ " . $row['id'] . " ri---- " . $rand_int);
}
//Create the link for the user to verify the subscription
$url = "http://" . $_SERVER['HTTP_HOST'] . "/smic/subscription.php?newid=" . $rand_int;
$mymail = $_POST['email1'];
$esubject = "Please verify your subscription to iAndApp's newsletter ";
$body = "Click the link in order to verify your subscription (If you cannot click the link, just copy it and paste it into the adress field of your browser): " . $url;
$eemail = "NoReply#iandapp.com";
$sent = mail($mymail,$esubject,$body,"From: $eemailn");
if($sent){
if($existing != 1){
echo "<br/>An e-mail with a link has been sent to ". $mymail . ". Please click the link in order to verify your subscription";
}
}else{
echo "Something went wrong. Please try again and make sure you enter a correct e-mail adress.";
}
$existing = 0;
mysqli_free_result($result);
//If unsubscribing
}elseif($_POST['unsubscribedmail'] != ""){
//echo("Unsubscribe........");
//echo($_POST['unsubscribedmail']);
$result = mysqli_query($mysqli,"UPDATE users SET waiting_for_unsubscribe = 1 WHERE email = '" . $_POST['unsubscribedmail'] . "'");
//echo("Err code " . mysqli_errno($mysqli));
//echo("Err text " . mysqli_error($mysqli));
if(mysqli_errno($mysqli)){
echo("Error code " . mysqli_errno($mysqli) . "<br/>");
echo("Error text " . mysqli_errno($mysqli) . "<br/>");
}
$result = mysqli_query($mysqli,"SELECT id FROM users WHERE email = '" . $_POST['unsubscribedmail'] . "'");
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
//echo("ID------ " . $row['id']);
//Create the link for the user to verify that he/she unsubscribes
$url = "http://" . $_SERVER['HTTP_HOST'] . "/smic/subscription.php?unsubscribeid=" . $row['id'];
$mymail = $_POST['unsubscribedmail'];
$esubject = "Please verify that you want to unsubscribe from iAndApp's newsletter ";
$body = "Click the link in order to verify that you want to unsubscribe from iAndApp's newsletter (If you cannot click the link, just copy it and paste it into the adress field of your browser): " . $url;
$eemail = "NoReply#iandapp.com";
$sent = mail($mymail,$esubject,$body,"From: $eemailn");
if ($sent) echo "<br/>A mail with a link has been sent to ". $mymail . ". Please click the link in order to verify that you will unsubscribe from the newsletters.";
else echo "Something went wrong. Please try again and make sure you enter a correct e-mail adress.";
mysqli_free_result($result);
}elseif($_GET['unsubscribeid'] != ""){
$result = mysqli_query($mysqli,"UPDATE users SET subscriber = 0, waiting_for_unsubscribe = 0 WHERE id = " . $_GET['unsubscribeid']);
if($result){
echo("<p>You have now unsubscribed to the newsletter. Thank you for this time and we hope to see you again in the future. /iAndApp.<p/>");
}else{
echo("<p>Somthing went wrong, please click the link again!<p/> ".$result);
}
}else{
echo("<div class="subscribe">
<h4>Subscribe</h4>
<p>Subscribe to iAndApp's newsletter in order to get information about new and updated iPhone games and iPhone applications, that has been released by iAndApp. </p>
<form action="subscription.php" name="subscribe" method="post" onsubmit="return isValidEmailAndEqual()">
<p class="formlabel">Förnamn</p> <input type="text" name="first_name"/><br/>
<p class="formlabel">Efternamn</p> <input type="text" name="surname"/> <br/>
<p class="formlabel">E-mail</p> <input type="text" name="email1"/>
<br/>
<p class="formlabel">Repeat e-mail</p> <input type="text" name="email2"/> <br/>
<input class="inputsubmit" type="submit" value="Subscribe"/>
</form>
</div>");
echo("<div class="footer"></div>");
echo("<div class="subscribe">
<h4>Unsubscribe</h4>
<p>Fill in your e-mail address and submit in order to unsubscribe from iAndApp's newsletter. </p>
<form action="subscription.php" name="unsubscribe" method="post" onsubmit="return isValidEmail()">
<p class="formlabel">E-mail</p> <input type="text" name="unsubscribedmail"/><br/>
<input class="inputsubmit" name="submitbutton" type="submit" value="Unsubscribe"/>
</form>
</div>");
}
mysqli_close($mysqli);
echo("</div>");
?>
Of course, I don't expect you to go through and debug the entire application, but perhaps for the more expreienced folks out there, you know where to look.
I'm starting to get a bit stressed out here...
Please advice what the problem is and how I can solve it.
Thank you in advance!
eror in code:
echo("<div class="subscribe">
<h4>Subscribe</h4>
<p>Subscribe to i
in 1-st line you just close the string by 2-nd quote
you just need to correct code
You have to escape double quotes inside html tags or use single quotes. Right now, echo thinks it's closed after "<div class=". Use one of these:
echo "<div class=\"class\">";
or
echo '<div class="class">';
or
echo "<div class='class'>";
If you dont get any reposne from server (document is clear) or you have server errors but this is not all the time and sometimes script works fine it could be memory limit problem.
do{
$rand_int = rand(100000000, 999999999);
$result = mysqli_query($mysqli, "SELECT id FROM users WHERE id = " . $rand_int);
$no_of_rows = mysqli_num_rows($result);
}while($no_of_rows != 0);
This part of code dosn't look good for me, I suggest you to use auto_increment at id field in db (so id will be unique all the time)

Categories