|
connecten met mysql database w/out php
|
Geplaatst op 16-02-2012 21:41 | Gewijzigd door LazY op 16-02-2012 21:41
|

Master

|
Posts: 845
Joined: 06.03.10
|
Goedenavond MB,
Zoals gemerkt ben ik nog steeds bezig met mijn website project, en ik ben bij het laatste onderdeel aangekomen, namelijk het banscript maken. Nu heb ik besloten dat het toch geen php daemon wordt, maar OF een c++ applicatie, OF een Java app. Maar nu komt het dus. Hetgene wat die app moet doen, is een database checken, mensen in de server(s) checken, en als er een match is, die mensen kicken. En dit oneindig door laten lopen. Dit script kan makkelijk in php gemaakt worden, behalve het feit dat het fatsoenlijk oneindig doorloopt. Nu, ik heb beperkte kennis van beide opties die hierboven genoemd zijn, dus ik vraag hulp met het maken van dat script in java, c++ of als je een betere oplossing denkt te weten, die hier aan mij voor te leggen.
Bij voorbaat dank,
Ik.
failure = knowledge, knowledge = succes
Laziness is nothing more than the habit of resting before you get tired.
Consciousness, that awful time between naps
Edit Your Posts! Use this: 
Voor hulp: PM of Xfire: l4zy123 |
| |
| |
|
Geplaatst op 16-02-2012 22:21
|

Master

|
Posts: 875
Joined: 14.10.10
|
eh... what about... php page maken en dan elke 5 seconden de page refreshen, zodat het script opnieuw wordt aangeroepen?
LMGTFY! |
| |
| |
|
Geplaatst op 16-02-2012 22:35
|

Master

|
Posts: 845
Joined: 06.03.10
|
nou, het script moet doorlopen ook als de pagina openstaat. Een background programma dus..
failure = knowledge, knowledge = succes
Laziness is nothing more than the habit of resting before you get tired.
Consciousness, that awful time between naps
Edit Your Posts! Use this: 
Voor hulp: PM of Xfire: l4zy123 |
| |
| |
|
Geplaatst op 17-02-2012 10:49
|

Admin
.gif)
|
Posts: 2065
Joined: 17.01.06
|
Je kan ook opteren voor een Perlscript. Dat is beter geschikt als daemon dan PHP en is makkelijker dan C++ en efficiënter dan Java.
Proud Coder & Founder of Modbase
 |
| |
| |
Geplaatst op 17-02-2012 12:23 | Gewijzigd door LazY op 17-02-2012 12:24
|

Master

|
Posts: 845
Joined: 06.03.10
|
Ziet er zeker handig uit. Maar khad nog een paar vraagjes daarover dan. Heeft perl-script net als php een max run time? Of als ik in een perl script een for(;;) loop maak, zal het dan gewoon oneindig doorlopen? En accepteerd een webhost een perlscript als background-program?
failure = knowledge, knowledge = succes
Laziness is nothing more than the habit of resting before you get tired.
Consciousness, that awful time between naps
Edit Your Posts! Use this: 
Voor hulp: PM of Xfire: l4zy123 |
| |
| |
|
Geplaatst op 17-02-2012 13:17
|

Admin
.gif)
|
Posts: 2065
Joined: 17.01.06
|
Perl heeft geen maximale uitvoeringstijd standaard ingesteld.
GeSHi: PHP
Zo'n oneindige lus kan dus perfect gebruikt worden. Of een webhost dit toelaat weet ik niet. Dat moet je aan de host zelf vragen.
Proud Coder & Founder of Modbase
 |
| |
| |
Geplaatst op 17-02-2012 16:23 | Gewijzigd door LazY op 17-02-2012 16:40
|

Master

|
Posts: 845
Joined: 06.03.10
|
Oke, ik ben nu een tut aant doorlezen en dingetjes aant proberen in perl. Probleem is, in de tut hebben ze het over linux en dat het zich in een webbrowser laat zien, maar ik zit op windows 7, en het komt niet in een webbrowser, maar in mijn command scherm... dat zwarte schermpje. En na ieder script sluit het zich automatisch weer..
deze tut volg ik: http://www.tizag....script.php
Er staat dat deze lijn er voor zorgt dat perl zich in een browser opent:
print "content-type: text/html \n\n";
mijn script:
#!C:\Perl64\bin\perl
print "content-type: text/html \n\n";
print "Ohai! It's me, Perl!";
maar werken doet het niet..
failure = knowledge, knowledge = succes
Laziness is nothing more than the habit of resting before you get tired.
Consciousness, that awful time between naps
Edit Your Posts! Use this: 
Voor hulp: PM of Xfire: l4zy123 |
| |
| |
|
Geplaatst op 17-02-2012 18:34
|

Master

|
Posts: 2467
Joined: 01.07.08
|
2de lijntje gaat toch over windows hoor
Code#!D:\Perl\bin\perl
mss vind je hier iets?
http://www.extrop...s/winperl/
Toekomstige Computer & Cybre Crime Professional @ Howest, Brugge

Vrijetijdsproject - C# Web Browser
€€€ Slice the Pie BOT €€€ => The Botting Network
Driehoek van Pascal
"The thing about quotes from the internet is that it's hard to verify their authenticity." - Abraham Lincoln
"The top gets higher the more that you climb" - Ezio Auditore Da Firenze |
| |
| |
|
Geplaatst op 17-02-2012 19:06
|

Admin
.gif)
|
Posts: 2065
Joined: 17.01.06
|
Natuurlijk komt het niet in je webrowser. Die regel plaats gewoon een HTTP-header op de outputstream (in jouw geval dus de console output). Zolang je het Perlscript start vanaf een console, dan zal je de inhoud van een print-opdracht ook in je console zien. Om het in een webbrowser te zien zal je het als een cgi-script vanaf je webserver moeten oproepen, maar dan stel ik mij de vraag waarom je een daemon vanaf een webbrowser zou starten?
Natuurlijk stopt het script iedere keer, want er nergens een oneindige lus gedefinieerd. Zodra alle regels afgewerkt zijn moet het script niks meer doen en stopt het wanneer het de laatste opdracht uitgevoerd heeft.
Proud Coder & Founder of Modbase
 |
| |
| |
Geplaatst op 18-02-2012 12:22 | Gewijzigd door LazY op 18-02-2012 12:22
|

Master

|
Posts: 845
Joined: 06.03.10
|
Stijn, je hebt volkomen gelijk, maar ik werd door die tut een beetje opt verkeerde been gezet, want daar hebben ze het erover dat het wel in een webbrowser komt.
Maar nu, voor mijn banscript, heb ik jullie hulp een beetje nodig. Ik heb namelijk een php script dat commands naar je cod server stuurt, maar nu moet dat via perl. Het meeste van mijn script heb ik al, maar dit stukje kom ik niet uit:
GeSHi: PHP// vanaf hier $receive = fread($connect, 1); { do { $receive = $receive . fread($connect, 1); } while($status_pre['unread_bytes'] != $status_post['unread_bytes']); } //tot hier
$connect is hier de socket, die ik dus al heb in perl
$send is wat er gestuurd moet worden, wat ik dus ook al heb
Wat de hierboven gegeven code doet is de response van de server op het command wat jij stuurt ophalen. Bijvoorbeeld al stuur je naar je server 'rcon scr_sd_timelimit', dan krijg je zoiets als 'scr_sd_timelimit: 20 default: 10', en dit script haalt die informatie op. Maar nu, hoe maak ik dit gedeelte in perl?
failure = knowledge, knowledge = succes
Laziness is nothing more than the habit of resting before you get tired.
Consciousness, that awful time between naps
Edit Your Posts! Use this: 
Voor hulp: PM of Xfire: l4zy123 |
| |
| |
|
Geplaatst op 18-02-2012 13:26
|

Admin
.gif)
|
Posts: 2065
Joined: 17.01.06
|
Bekijk deze 2 pagina's eens: http://www.tidytu...ample.html en http://perldoc.pe...ocket.html
Bij die eerste zijn opnieuw die HTTP-headers niet belangrijk, want het betreft daar opnieuw een webserver voorbeeld. Gebruik gewoon dezelfde while-loop en de Perl default variabele ($_). De tweede link kan je helpen bij het vinden van nuttige functies en wat meer uitleg over de connect-functie enzo.
Proud Coder & Founder of Modbase
 |
| |
| |
Geplaatst op 18-02-2012 21:02 | Gewijzigd door LazY op 18-02-2012 21:43
|

Master

|
Posts: 845
Joined: 06.03.10
|
Code#!C:\Perl64\bin\perl
use IO::Socket;
use DBI;
use DBD::mysql;
print "content-type: text/html \n\n";
$dsn = "dbi:mysql:ban_test","root";
$connect = DBI->connect($dsn) or die "Unable to connect: $DBI::errstr\n";
sleep(2);
$query="SELECT * FROM servers";
$query_handle = $connect->prepare($query);
$query_handle->execute() or die "SQL Error: $DBI::errstr\n";
$query_handle->bind_columns(undef, \$ip, \$port, \$pass, \$name);
while($query_handle->fetch())
{
print "$id, $product, $quantity <br />";
}
sleep(2);
met dit bovenstaande script kom ik deze error tegen:
DBI connect('ban_test', '',...) failed: Access denied for user ''@'localhost' to database 'ban_test'
Ik heb al wat gegoogled, maar kben niets nuttigs tegengekomen.
failure = knowledge, knowledge = succes
Laziness is nothing more than the habit of resting before you get tired.
Consciousness, that awful time between naps
Edit Your Posts! Use this: 
Voor hulp: PM of Xfire: l4zy123 |
| |
| |
|
Geplaatst op 18-02-2012 21:35
|

Master

|
Posts: 1361
Joined: 25.01.09
|
je hebt geen juiste username ingegeven voor de database
 |
| |
| |
|
Geplaatst op 18-02-2012 22:47
|

Master

|
Posts: 845
Joined: 06.03.10
|
Oke, maar hoe gaat dat dan? Voor zover ik weet hoeft dat niet in php, of zit ik daar fout?
failure = knowledge, knowledge = succes
Laziness is nothing more than the habit of resting before you get tired.
Consciousness, that awful time between naps
Edit Your Posts! Use this: 
Voor hulp: PM of Xfire: l4zy123 |
| |
| |
|
Geplaatst op 18-02-2012 22:57
|

Admin
.gif)
|
Posts: 2065
Joined: 17.01.06
|
Hoezo dat hoeft niet bij PHP? Denk je dat PHP zomaar je wachtwoord kan raden ofzo 
Ik raad je aan om eens wat goeie research te doen. Zelf weet ik niet vanbuiten hoe je met Perl verbinding maakt met een MySQL-database. Ik moet dus net zoals jij zo'n zaken opzoeken. Once more, Google is your friend 
Proud Coder & Founder of Modbase
 |
| |
| |
|
Geplaatst op 21-02-2012 23:23
|

Master

|
Posts: 845
Joined: 06.03.10
|
Stijn schreef:
Hoezo dat hoeft niet bij PHP? Denk je dat PHP zomaar je wachtwoord kan raden ofzo [haha]
Ik raad je aan om eens wat goeie research te doen. Zelf weet ik niet vanbuiten hoe je met Perl verbinding maakt met een MySQL-database. Ik moet dus net zoals jij zo'n zaken opzoeken. Once more, Google is your friend ;)
Ik hoopte erop dat je dat eerste deel van dat antwoord zou zeggen. Daarna verwachtte ik alleen een beknopte beschrijven, maar nee :). Maar ik heb het zelf wat uitgevogeld, en ben nu perongeluk op een ander probleem gestuit, wat eigenlijk maar goed is ook. Mijn script:
Code {database connect hier}
while($query_handle->fetch())
{
print "$ip, $port, $pass \n"; #TEST#
my $sock = new IO::Socket::INET (
PeerAddr => $ip,
PeerPort => $port,
Proto => 'udp',
);
die "Could not create socket: $!\n" unless $sock;
print $sock "rcon status";
$count=0;
$arraynum=0;
while(<$sock>)
{
if(!defined($_))
{
print "not a valid socket\n\n";
last;
}
print($_);
$count++;
print "$count COUNT \n";
if($count>4)
{
@playerarray[$arraynum]=$_;
#print "@playerarray[$arraynum] PLAYER \n";
$arraynum++;
}
print length($_) . " LENGTH \n";
sleep(1);
if(length($_) < 2)
{
print "end1\n\n";
last;
}
}
close($sock);
print "end2\n\n";
}
Wat ik wil doen met deze code is alle servers die deze bantool gebruiken opslaan in een database, deze ophalen, een socket connecten, en dan de spelers checken om te kijken of er gebande spelers inzitten, om deze vervolgens te kicken.
Deze code werkt helemaal prima, behalve als het langs een server komt die bijv, niet meer bestaat, of iig langs een ongeldige ip+port+password komt. Dan died dit script bij de die na de socket. Nu is mijn vraag, hoe kan ik ipv een die, gewoon een last; doen, dat hij verdergaat naar de volgende?
failure = knowledge, knowledge = succes
Laziness is nothing more than the habit of resting before you get tired.
Consciousness, that awful time between naps
Edit Your Posts! Use this: 
Voor hulp: PM of Xfire: l4zy123 |
| |
| |
|
Geplaatst op 21-02-2012 23:49
|

Admin
.gif)
|
Posts: 2065
Joined: 17.01.06
|
Verander:
die "Could not create socket: $!\n" unless $sock;
In:
next unless $sock;
Proud Coder & Founder of Modbase
 |
| |
| |
Geplaatst op 22-02-2012 14:43 | Gewijzigd door LazY op 22-02-2012 14:44
|

Master

|
Posts: 845
Joined: 06.03.10
|
update:
mijn script:
Code#!C:\Perl64\bin\perl
use IO::Socket;
use DBI;
use DBD::mysql;
print "content-type: text/html \n\n";
{database}
while($query_handle->fetch())
{
print "$ip, $port, $pass \n";
my $sock = new IO::Socket::INET (
PeerAddr => $ip,
PeerPort => $port,
Proto => 'udp',
);
next unless $sock;
print "test\n\n";
$sock->send("rcon status");
print "test 2\n\n";
sleep(1);
print "$sock \n\n";
while(<$sock>)
{
print "in loop \n\n";
print $_;
if(length $_ < 2)
{last;}
}
print "after loop \n\n";
print "$sock \n\n";
sleep(1);
}
print "end";
sleep(2);
Nu, bij de werkende socket, mijn server, gebeurt het script gewoon. Bij de tweede socket, die dan dus niet werkt, stopt hij op de while(<$socket>), want alles ervoor print hij, maar niets in die while of na die while. Als ik mijn server offline houd, dan gaat dit script alsnog gewoon door tot de tweede loop, waar deze dan vervolgens stopt. Als ik een neppe server voorop zet, dan stopt dit script gelijk na de neppe server. Eender welke ip+port+wachtwoord, echt of niet, waar geen server op staat, faalt dit script, behalve mijn homeserver.
Hoe check ik of de socket valid is?
failure = knowledge, knowledge = succes
Laziness is nothing more than the habit of resting before you get tired.
Consciousness, that awful time between naps
Edit Your Posts! Use this: 
Voor hulp: PM of Xfire: l4zy123 |
| |