Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP] TomatoAnon ripper

Pagina: 1
Acties:

  • RobbyTown
  • Registratie: April 2007
  • Niet online
Momenteel ben ik bezig met een ripper om zo de uptime te laten showen van mijn router.

Orginele script:

PHP:
1
2
3
4
5
6
7
8
9
$content = file_get_contents('http://www.sparkfun.com/commerce/product_info.php?products_id=9279');

preg_match('#<tr><th>(.*)</th> <td><b>price</b></td></tr>#', $content, $match);
$price = $match[1];

preg_match('#<input type="hidden" name="quantity_on_hand" value="(.*?)">#', $content, $match);
$in_stock = $match[1];

echo "Price: $price - Availability: $in_stock\n";


Een beetje verbouwd naar mijn hand om het wat werkend te krijgen.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
                    

$content = file_get_contents('http://tomato.groov.pl/tomatoanon.php?search=9&routerid=1db7a7ec19a010d6122580c41c1d549b');

preg_match('#<tr><th>(.*)</th> <td><b>Uptime</b></td></tr>#', $content, $match);
$uptime = $match[1];

preg_match('#<td align=center><font size=2>(.*?)</font></td>#', $content, $match);
$last_update = $match[1];

echo "Network uptime: ".$uptime." - Last update: ".$last_update;
                    ?>
 


Het enige wat nu werkt is Last Update output.
Network uptime: - Last update: Netherlands

Dat klopt niet helemaal

preg_match opbouw is fout, even hier info gelezen. Alleen dan nog heb ik geen idee wat het moet worden :(.
http://www.m2bwebsolutions.nl/index.php?actie=preg_match

Wat moet ik doen om mijn gewenste output te krijgen?

Blog - Glasnet status (privé log) - Nette LAN - RIPE Atlas Probe


  • Gleighton
  • Registratie: November 2008
  • Niet online
Je kunt met https://www.debuggex.com/ vergelijken waar je expressie op matcht, om zo te kijken wat er fout gaat.

Echter zijn reguliere expressies niet de ideale methode om html mee te parsen, er zijn situaties waarbij het onmogelijk is om een html pagina fatsoenlijk te parsen met een reguliere expressie. Beter daarvoor is het gebruiken van een library die gemaakt is om html te parsen.

  • RobbyTown
  • Registratie: April 2007
  • Niet online
Gleighton schreef op vrijdag 17 januari 2014 @ 22:06:
Je kunt met https://www.debuggex.com/ vergelijken waar je expressie op matcht, om zo te kijken wat er fout gaat.

Echter zijn reguliere expressies niet de ideale methode om html mee te parsen, er zijn situaties waarbij het onmogelijk is om een html pagina fatsoenlijk te parsen met een reguliere expressie. Beter daarvoor is het gebruiken van een library die gemaakt is om html te parsen.
Zoals dit?
http://simplehtmldom.sourceforge.net/

Blog - Glasnet status (privé log) - Nette LAN - RIPE Atlas Probe


  • Gleighton
  • Registratie: November 2008
  • Niet online
Die is redelijk simpel inderdaad.

  • RobbyTown
  • Registratie: April 2007
  • Niet online
Gleighton schreef op vrijdag 17 januari 2014 @ 22:33:
Die is redelijk simpel inderdaad.
Zitten hobbyen maar ik krijg het niet bepaald werkend enige output die ik krijg is de platte tekst versie.

Blog - Glasnet status (privé log) - Nette LAN - RIPE Atlas Probe


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
RobbyTown schreef op maandag 20 januari 2014 @ 00:54:
[...]

Zitten hobbyen maar ik krijg het niet bepaald werkend enige output die ik krijg is de platte tekst versie.
Wat wil er dan niet lukken? Wat heb je al geprobeerd, en waarom werkt dat niet zoals je verwacht? Het is hier geen helpdesk waar je simpel je probleem kunt dumpen en een kant en klare oplossing moet verwachten.

Wij verwachten van een poster minstens dat hij zelf moeite doet om het probleem op te lossen, en daarbij dus ook debugt. Mocht het dan toch niet lukken dan verwachten we ten minste een duidelijk omschrijving van het probleem, wat er mis gaat, en wat je geprobeerd hebt om dat op te lossen!

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • RobbyTown
  • Registratie: April 2007
  • Niet online
Woy schreef op maandag 20 januari 2014 @ 08:13:
[...]

Wat wil er dan niet lukken? Wat heb je al geprobeerd, en waarom werkt dat niet zoals je verwacht? Het is hier geen helpdesk waar je simpel je probleem kunt dumpen en een kant en klare oplossing moet verwachten.

Wij verwachten van een poster minstens dat hij zelf moeite doet om het probleem op te lossen, en daarbij dus ook debugt. Mocht het dan toch niet lukken dan verwachten we ten minste een duidelijk omschrijving van het probleem, wat er mis gaat, en wat je geprobeerd hebt om dat op te lossen!
Wat wil er dan niet lukken?
Om de uptime te rippen. Rippen lukt deels, ik krijg land ipv uptime. Zie startpost.

Deel van broncode van url

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<font size=2><br><br>Found <u><b>1</b></u> records in database<br></font>

<table class="sortable" border="1" width="1000">
    <tr>
        <td align=center width=40><b>Flag</b></td>
        <td align=center width=100><b>Country</b></td>
        <td align=center width=210><b>Router`s Model</b></td>
        <td align=center width=140><b>Tomato Version</b></td>
        <td align=center width=140><b>Installed Buildtype</b></td>
        <td align=center width=80><b>WL Driver</b></td>
        <td align=center width=70><b>Uptime</b></td>
        <td align=center width=100><b>Tomato MOD</b></td>
        <td align=center width=120><b>Last Update</b></td>
    </tr>
    <tr>
        <td align=center><a href="tomatoanon.php?country=Netherlands"><img src="flags/nl.gif" border=0></a></td>
        <td align=center><font size=2>Netherlands</font></td>
        <td align=center><font size=2><a style="color: black; text-decoration: none;" href="tomatoanon.php?model=Asus RT-AC66U">Asus RT-AC66U</a></font></td>
        <td align=center><font size=2><a style="color: black; text-decoration: none;" href="tomatoanon.php?version=115 K26AC USB">115 K26AC USB</a></font></td>
        <td align=center><font size=2><a style="color: black; text-decoration: none;" href="tomatoanon.php?buildtype=AIO-64K">AIO-64K</a></font></td>
        <td align=center><font size=2>6.30.102.9</font></td><td align=center><font size=2>2 days</font></td><td align=center><font size=2>Shibby</font></td>
        <td align=center><font size=2>2014-01-20 18:49</font></td></tr></table></center><br><hr width=1000><center></center></body>
    </tr>
</table>


Enige wat ik wil rippen is aantal dagen up. Momenteel dus 2 days zou output moeten zijn. Met mijn geposte code in topic start krijg ik output Netherlands, hij ript, alleen het verkeerde. Nu post ik hier het topic omdat ik na uren klooien geen stap verder kom. Ik kan tekens weghalen of bijzetten in het script. Enige output is Netherlands of -

Als reactie krijg ik een gave link naar een website, gooi daar mijn code in van startpost. Met alle respect maar snap totaal niet hoe ik daar naar mijn oplossing toe kan werken. Verder was mijn code ook niet goed om dit zo uit te lezen. Oke handige tip. Google dus en vind wat geen idee als het wat is. Blijkbaar kan het daarmee.

code:
1
2
3
4
5
6
7
8
9
10
<?php
include_once("simple_html_dom.php");

$html = file_get_html('http://tomato.groov.pl/tomatoanon.php?search=9&routerid=1db7a7ec19a010d6122580c41c1d549b');

$ret = $html->find('days');

echo $ret;

?>

Output: Array

Oftewel hij doet nog minder dan wat ik al had.

Wij verwachten van een poster minstens dat hij zelf moeite doet om het probleem op te lossen.
Hier ben ik al inmiddels een halve dag mee bezig en topic start is niet geheel blanco gestart naar mijn idee.

Blog - Glasnet status (privé log) - Nette LAN - RIPE Atlas Probe


  • ID-College
  • Registratie: November 2003
  • Laatst online: 22-11 13:57
Wat zit er in die array dan? Doe daar eens een print_r van...

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 09:39

orf

Wat verwacht je hiervan?

PHP:
1
$ret = $html->find('days');


Moet je geen CSS selector gebruiken?

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Als je die regex nu eens wat specifieker maakt, zodat er maar één match mogelijk is:

code:
1
<td align=center><font size=2>(.*?) days</font></td>

  • DXaroth
  • Registratie: Maart 2011
  • Laatst online: 24-08 19:58
Misschien beeeeetje outside-the-box denken, maar ondersteunt je router geen SNMP?

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

RobbyTown schreef op maandag 20 januari 2014 @ 19:31:
Output: Array

Oftewel hij doet nog minder dan wat ik al had.
De output die is er wel, het is alleen geen string, maar een array. Je moet alleen een index vanuit de array meegeven om weer te geven. Zet in het stukje wat je hebt bijvoorbeeld eens
PHP:
1
2
3
echo '<pre>';
print_r($die_array);
echo '</pre>';
Je zult zien dat je dan méér output hebt dan wat je nu in beeld hebt.

[ Voor 4% gewijzigd door CH4OS op 20-01-2014 19:48 ]


  • RobbyTown
  • Registratie: April 2007
  • Niet online
DXaroth schreef op maandag 20 januari 2014 @ 19:43:
Misschien beeeeetje outside-the-box denken, maar ondersteunt je router geen SNMP?
SNMP is het probleem niet, de uptime trek ik via deze link eruit: http://tomato.groov.pl/to...c19a010d6122580c41c1d549b

Via deze link krijg ik mijn stats van mijn router te zien. Dat is een mooie link en een leuke pagina maar ik wil puur de uptime hebben, momenteel: 2 days.
HuHu schreef op maandag 20 januari 2014 @ 19:40:
Als je die regex nu eens wat specifieker maakt, zodat er maar één match mogelijk is:

code:
1
<td align=center><font size=2>(.*?) days</font></td>
Met die code krijg ik NetherlandsAsus RT-AC66U115 K26AC USBAIO-64K6.30.102.92
Dit is redelijk warm. Echter heb ik alleen het laatste cijfer nodig dat is mijn uptime.
CptChaos schreef op maandag 20 januari 2014 @ 19:47:
[...]
De output die is er wel, het is alleen geen string, maar een array. Je moet alleen een index vanuit de array meegeven om weer te geven. Zet in het stukje wat je hebt bijvoorbeeld eens
PHP:
1
2
3
echo '<pre>';
print_r($die_array);
echo '</pre>';
Je zult zien dat je dan méér output hebt dan wat je nu in beeld hebt.
Gedaan dan word de output:
Array
(
)

[ Voor 50% gewijzigd door RobbyTown op 20-01-2014 19:56 ]

Blog - Glasnet status (privé log) - Nette LAN - RIPE Atlas Probe


  • ID-College
  • Registratie: November 2003
  • Laatst online: 22-11 13:57
RobbyTown schreef op maandag 20 januari 2014 @ 19:49:

Met die code krijg ik NetherlandsAsus RT-AC66U115 K26AC USBAIO-64K6.30.102.92
Dit is redelijk warm. Echter heb ik alleen het laatste cijfer nodig dat is mijn uptime.
Als dit altijd goed gaat dan ben je er dus. Nu hoef je alleen maar te zorgen dat het laatste getal weergegeven dient te worden.

Hint: substr ;)

  • RobbyTown
  • Registratie: April 2007
  • Niet online
ID-College schreef op maandag 20 januari 2014 @ 20:57:
[...]

Als dit altijd goed gaat dan ben je er dus. Nu hoef je alleen maar te zorgen dat het laatste getal weergegeven dient te worden.

Hint: substr ;)
Dank u voor de tip :)

PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php
                    

$content = file_get_contents('http://tomato.groov.pl/tomatoanon.php?search=9&routerid=1db7a7ec19a010d6122580c41c1d549b');

preg_match('#<td align=center><font size=2>(.*?) days</font></td>#', $content, $match);
$uptime = $match[1];
$uptime_output = substr($uptime, -1);

echo "Network uptime: ".$uptime_output." dagen";
                    ?>

[ Voor 19% gewijzigd door RobbyTown op 20-01-2014 21:16 ]

Blog - Glasnet status (privé log) - Nette LAN - RIPE Atlas Probe


  • MuddyMagical
  • Registratie: Januari 2001
  • Nu online
RobbyTown schreef op maandag 20 januari 2014 @ 21:03:
[...]

Dank u voor de tip :)

PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php
                    

$content = file_get_contents('http://tomato.groov.pl/tomatoanon.php?search=9&routerid=1db7a7ec19a010d6122580c41c1d549b');

preg_match('#<td align=center><font size=2>(.*?) days</font></td>#', $content, $match);
$uptime = $match[1];
$uptime_output = substr($uptime, -1);

echo "Network uptime: ".$uptime_output." dagen";
                    ?>
En als hij nu 10 dagen up is laat je script '0' zien. :>
En wat al je router 2 maanden up is? Laat die pagina dan '60 days' zien of '2 months'?

Edit:
Je kan beter die preg_match wijzigen naar preg_match_all en dan 'days' verwijderen uit die criteria.
Dan heb je alle informatie uit die table in de variable $match.
Als je dan
PHP:
1
2
3
echo('<pre>');
print_r($match);
echo('</pre>');

in je code zet zie je hoe die array eruit ziet.

Het is dan een kleine moeite om de juiste info uit te lezen.

spoiler:
[code=php]
<?php
$content = file_get_contents('http://tomato.groov.pl/tomatoanon.php?search=9&routerid=1db7a7ec19a010d6122580c41c1d549b');
preg_match_all('#<td align=center><font size=2>(.*?)</font></td>#', $content, $match);

echo "Network uptime: ".$match[0][5];
?>
[/code]

[ Voor 38% gewijzigd door MuddyMagical op 20-01-2014 21:21 ]


  • RobbyTown
  • Registratie: April 2007
  • Niet online
MuddyMagical schreef op maandag 20 januari 2014 @ 21:09:
[...]

En als hij nu 10 dagen up is laat je script '0' zien. :>
En wat al je router 2 maanden up is? Laat die pagina dan '60 days' zien of '2 months'?

Edit:
PHP:
1
2
3
4
5
6
<?php
$content = file_get_contents('http://tomato.groov.pl/tomatoanon.php?search=9&routerid=1db7a7ec19a010d6122580c41c1d549b');
preg_match_all('#<td align=center><font size=2>(.*?)</font></td>#', $content, $match); 

echo "Network uptime: ".$match[0][5];
?>
Waarvan ik het rip geeft het in days weer behalve de eerste 24 uur dan krijg je 3:12 ofzo maar daarna pakt hij hele dagen

xxx days

Hey bedankt voor spoiler kan meteen de last update verwerken dat is nummer 7.

Meteen op zijn hollands weergeven:
PHP:
1
2
3
4
5
6
7
<?php
$content = file_get_contents('http://tomato.groov.pl/tomatoanon.php?search=9&routerid=1db7a7ec19a010d6122580c41c1d549b');
preg_match_all('#<td align=center><font size=2>(.*?)</font></td>#', $content, $match);


echo "Network uptime: ".str_replace("days","dagen",$match[1][5]);
?>  

[ Voor 23% gewijzigd door RobbyTown op 20-01-2014 21:31 ]

Blog - Glasnet status (privé log) - Nette LAN - RIPE Atlas Probe


  • MuddyMagical
  • Registratie: Januari 2001
  • Nu online
Even doorgaan op een eerdere comment.

Als systeembeheerder weet jij natuurlijk ook dat het rippen van een uptime van een router via een open database op het internet niet echt efficient is. Jij hebt ook geleerd dat SNMP specifiek bedoelt is voor het monitoren van apparatuur.
En dat je op jouw router ook SNMP kan installeren.

http://www.fatmin.com/201...asus-rt-ac66u-router.html

Dan ben je namelijk niet afhankelijk van een tomatenwebsite. :>

Vermoedelijk wil men je hier ook wel helpen als je er niet uit komt: [Ervaringen] Asus RT-N66U (N900) dual-band router

[ Voor 12% gewijzigd door MuddyMagical op 20-01-2014 21:26 ]


  • RobbyTown
  • Registratie: April 2007
  • Niet online
MuddyMagical schreef op maandag 20 januari 2014 @ 21:24:
Even doorgaan op een eerdere comment.

Als systeembeheerder weet jij natuurlijk ook dat het rippen van een uptime van een router via een open database op het internet niet echt efficient is. Jij hebt ook geleerd dat SNMP specifiek bedoelt is voor het monitoren van apparatuur.
En dat je op jouw router ook SNMP kan installeren.

http://www.fatmin.com/201...asus-rt-ac66u-router.html

Dan ben je namelijk niet afhankelijk van een tomatenwebsite. :>

Vermoedelijk wil men je hier ook wel helpen als je er niet uit komt: [Ervaringen] Asus RT-N66U (N900) dual-band router
SNMP zit bij TomatoUSB is kwestie van een vinkje aanzetten, dan heb je SNMP.

Maar SNMP laat ik liever uit gevinkt
https://www.ncsc.nl/actue...ge-snmp-configuratie.html


In elk geval bedankt voor de hulp. Final code. Nederlandse weergaven:
PHP:
1
2
3
4
5
6
7
8
<?php
$content = file_get_contents('http://tomato.groov.pl/tomatoanon.php?search=9&routerid=1db7a7ec19a010d6122580c41c1d549b');
preg_match_all('#<td align=center><font size=2>(.*?)</font></td>#', $content, $match);

echo "Netwerk online: ".str_replace("days","dagen",$match[1][5]);
echo "Laatste update: ".date("d-m-Y H:i", strtotime($match[1][7]));

?>

[ Voor 19% gewijzigd door RobbyTown op 20-01-2014 21:52 ]

Blog - Glasnet status (privé log) - Nette LAN - RIPE Atlas Probe


  • 8088
  • Registratie: December 2000
  • Niet online

8088

NaN

RobbyTown schreef op maandag 20 januari 2014 @ 21:19:
Waarvan ik het rip geeft het in days weer behalve de eerste 24 uur dan krijg je 3:12 ofzo maar daarna pakt hij hele dagen
Behalve de eerste 48 uur.

Volgens de documentatie van Simple HTML DOM Parser kun je naar elementen zoeken. 'days' is geen element (en bovendien geen constante). Iets als het volgende zou dus wel moeten werken:
PHP:
1
$html->find('td[align=center] font[size=2]');

Maar omdat de HTML die je inleest brak is, bijt de parser zich daarop stuk. Wat dan kan helpen is de code opschonen met behulp van tidy:
PHP:
1
2
3
4
$html = file_get_contents('http://tomato.groov.pl/tomatoanon.php?search=9&routerid=1db7a7ec19a010d6122580c41c1d549b');
$tidy = new tidy;
$tidy->parseString($html, array('output-xhtml' => false), 'utf8');
$tidy->cleanRepair();

Vervolgens lees je de string in met Simple HTML DOM Parser:
PHP:
1
$html = str_get_html($tidy);

en itereer je over de juiste elementen tot je vindt wat je zocht:
PHP:
1
2
3
4
foreach($dom->find('td[align=center] font[size=2]') as $e)
{
    echo '<pre>'.$e.'</pre>';
}

Netherlands
Asus RT-AC66U
115 K26AC USB
AIO-64K
6.30.102.9
2 days
Shibby
2014-01-20 18:49

Do you seek to engage in or have you ever engaged in terrorist activities, espionage, sabotage, or genocide?


  • MuddyMagical
  • Registratie: Januari 2001
  • Nu online
RobbyTown schreef op maandag 20 januari 2014 @ 21:35:
[...]

SNMP zit bij TomatoUSB is kwestie van een vinkje aanzetten, dan heb je SNMP.

Maar SNMP laat ik liever uit gevinkt
https://www.ncsc.nl/actue...ge-snmp-configuratie.html
En onveilige Apache configuraties maken webservers kwetsbaar, maar daardoor gebruiken we toch opeens geen Apache meer?

Wat het NCSC hier zegt is gewoon, gebruik geen SNMPv1 meer en zorg dat je je config goed hebt. Dan is er niets aan de hand. Zeker niet als je zoals hier het alleen hebt over een read-only trap.

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Dus omdat NCSC aangeeft dat er wel 13k huishoudens zijn die hun spullen niet goed geconfigureerd hebben staan, gebruik jij het maar niet? :? Als je gewoon zorgt dat het SNMP verkeer van buiten geweigerd wordt, dan ben je er toch? Je webserver die de pagina over de uptime serveert, zit neem ik aan in jouw interne netwerk toch? Dan heb je met het door jou gelinkte NCSC artikel toch niets te maken?

  • RobbyTown
  • Registratie: April 2007
  • Niet online
CptChaos schreef op dinsdag 21 januari 2014 @ 20:03:
[...]
Dus omdat NCSC aangeeft dat er wel 13k huishoudens zijn die hun spullen niet goed geconfigureerd hebben staan, gebruik jij het maar niet? :? Als je gewoon zorgt dat het SNMP verkeer van buiten geweigerd wordt, dan ben je er toch? Je webserver die de pagina over de uptime serveert, zit neem ik aan in jouw interne netwerk toch? Dan heb je met het door jou gelinkte NCSC artikel toch niets te maken?
Neen deze pagina is ook vanaf het world wide web te zien.

Blog - Glasnet status (privé log) - Nette LAN - RIPE Atlas Probe

Pagina: 1