Bekijk Volledige Versie : DNS error - Default VPS server bij geen verbinding?
Ik heb een probleem waar ik na 3 dagen nog steeds niet uit ben.
De PHP functies fopen, fsockopen, curl, etc geven altijd terug dat een verbinding succesvol tot stand is gekomen, zelfs wanneer het URL helemaal niet bestaat.
Een fsockopen opdracht op bv. www.google.nl geeft uiteraard een succesvolle return, maar fsockopen geeft dat bij www.ggogogoogggoog.nl ook.
Na enig onderzoek blijkt dat al deze functies (fsockopen, curl, etc) altijd het resultaat van de eigen VPS server* terug geven als de URL niet gevonden kan worden.
*(Ik ga er maar van uit dat het de eigen VPS server is)
Dat is dus erg lastig omdat ik nu nooit zeker weet of een verbinding geslaagd is.
Is dit een verkeerde instelling in de VPS server? Is het iets van het DNS van de provider?
Wie kan mij hier bij helpen?
Bedankt!
ik neem aan dat je de dns servers van je vps provider hebt ingesteld?
wat als je een fsock open naar een ip adres doet? doet hij het dan ook bij adressen die niet bestaan?
DNS staat neem ik aan goed.
Fsockopen doet het prima wanneer de website ook bestaat. Maar bestaat deze niet dan krijg in een succesmelding terug op basis van (denk ik) mijn eigen VPS server.
Indien een website niet bestaat, dan krijg ik met CURL een 200 melding (succes) terug, met @curl_exec de output "Apache is functioning normally".
Hij test dus een andere website indien de opgegeven website niet bestaat. Welke? Geen idee, wellicht mijn eigen VPS server....
Erg lastig deze.
Wat krijg je als je zo'n adres pingt vanaf console? En als er een verbinding wordt gemaakt dan is dat zichtbaar op de server en in log bestanden, dus dat "wellicht" kan je ook wel in een "zeker" omzetten door even iets uit te zoeken.
Nee, dit is zoals het gaat:
www.google.nl gaat prima met fsockopen of curl, geen probleem.
Maar,
met www.gogoogogogoogog.nl krijg ik ook gewoon een succesmelding, En met CURL zelfs inhoud, namelijk:
Apache is functioning normally
Dus, vraag is. Hoe kan dit en naar welke server ' springt' ie als de url niet bestaat. Is de oorzaak DNS, Apache, php.ini en hoe dit op te lossen?
Net onderzocht. Hij springt inderdaad naar het IP adres van mijn VPS server wanneer een website met curl of fsockopen niet gevonden wordt. Bij een fout url geeft ie in plaats van een foutmelding een goedmelding op basis van mijn VPS ipadres (die dan natuurlijk up is).
Weet iemand waar ik kan in te stellen om dit te voorkomen?
Ok, ik heb even een testje gemaalt en het schijnt in het DNS te zitten.
Kijk eens op: http://www.adpeople.nl/testje.php
Vul daar een niet bestaand domein en en je krijgt als resultaat GEEN foutmelding maar ALTIJD het IP adres van mijn VPS server.
Rarara, hoe kan dat?! Anyone?
Even in /etc/resolv.conf de "search ..." regel wegflikkeren.
Je hebt waarschijnlijk een * A record in je dns zone en die zone heb je ook in de "search ..." regel staan; elk domein wat niet gevonden wordt, wordt dan jouw domein achter geplakt en door die * resolved alles wat normaal niet resolved, naar jouw IP.
Geweldig, ga dat even proberen. Moet de server voor in reboot, vrees ik... Morgenochtend maar even heel erg vroeg op dan :)
Bedankt Jurian!
Reboot is nergens voor nodig, 't is geen windows :p
hooguit even bind en apache restarten, dat zou genoeg moeten zijn :-)
Ik heb hetzelfde probleem bij mijn VPS. Ik dacht dat ik gewoon iedere keer iets verkeerd deed, maar het blijkt dus niet aan mijn php script te liggen.
Even probleem van Jurian uitproberen.
/edit
Er is helemaal geen 'search ..' aanwezig:
cat /etc/resolv.conf
nameserver 83.149.80.123
nameserver 62.212.64.122
nameserver 62.212.65.123
nameserver 85.17.96.69
Nee, bij mij ook niet. Jurian, enig idee waar het dan wel zit?
PS: soft reboot van Apache ja, maar dan is toch even de server down, dus toch vroeg op :)
Doe eens een "dig +trace -t A www.ditdomeinbestaatniet.nl" en plak de volledige output is hier?
en ook "host www.ditdomeinbestaatniet.nl" ? :)
Here you go (en bedankt voor de hulp)
; <<>> DiG 9.3.3rc2 <<>> +trace -t A www.ditdomeinbestaatnietmeer.nl
;; global options: printcmd
. 119754 IN NS E.ROOT-SERVERS.NET.
. 119754 IN NS F.ROOT-SERVERS.NET.
. 119754 IN NS G.ROOT-SERVERS.NET.
. 119754 IN NS H.ROOT-SERVERS.NET.
. 119754 IN NS I.ROOT-SERVERS.NET.
. 119754 IN NS J.ROOT-SERVERS.NET.
. 119754 IN NS K.ROOT-SERVERS.NET.
. 119754 IN NS L.ROOT-SERVERS.NET.
. 119754 IN NS M.ROOT-SERVERS.NET.
. 119754 IN NS A.ROOT-SERVERS.NET.
. 119754 IN NS B.ROOT-SERVERS.NET.
. 119754 IN NS C.ROOT-SERVERS.NET.
. 119754 IN NS D.ROOT-SERVERS.NET.
;; Received 384 bytes from 85.92.140.218#53(85.92.140.218) in 3 ms
nl. 172800 IN NS NS2.NIC.nl.
nl. 172800 IN NS NS3.NIC.nl.
nl. 172800 IN NS NS.DOMAIN-REGISTRY.nl.
nl. 172800 IN NS NL1.DNSNODE.NET.
nl. 172800 IN NS NS-EXT.ISC.ORG.
nl. 172800 IN NS NS4.NIC.nl.
nl. 172800 IN NS NS-NL.NIC.FR.
;; Received 447 bytes from 192.203.230.10#53(E.ROOT-SERVERS.NET) in 152 ms
nl. 900 IN SOA ns.domain-registry.nl. postmaster.domain-registry.nl. 2008111511 7200 900 2419200 900
;; Received 115 bytes from 213.154.241.28#53(NS2.NIC.nl) in 10 ms
En voor het host command:
Host www.ditdomeinbestaatnietmeer.nl not found: 3(NXDOMAIN)
Hmm, dat ziet er dan wel weer gewoon uit zoals 't hoort.
Hoe vraag je in php het IP adres op? Misschien gaat daar iets fout? :)
Probeer anders eens zo:
<?php
$hostname = 'www.ditdomeinbestaatookalniet.nl';
if (is_array($records = dns_get_record($hostname, DNS_ALL))) {
if (count($records)) {
printf('Results:<br><br>');
foreach ($records as $record) {
printf('<pre>'); var_dump($record); printf('</pre>');
}
} else {
printf('Domain does not exist<br>');
}
} else {
printf('DNS Query failed');
}
?>
en geef de output weer even door :)
Hmm, dat ziet er dan wel weer gewoon uit zoals 't hoort.
Hoe vraag je in php het IP adres op? Misschien gaat daar iets fout? :)
Probeer anders eens zo:
<?php
$hostname = 'www.ditdomeinbestaatookalniet.nl';
if (is_array($records = dns_get_record($hostname, DNS_ALL))) {
if (count($records)) {
printf('Results:<br><br>');
foreach ($records as $record) {
printf('<pre>'); var_dump($record); printf('</pre>');
}
} else {
printf('Domain does not exist<br>');
}
} else {
printf('DNS Query failed');
}
?>
en geef de output weer even door :)
demo@mail:~/public_html/test$ php dns.php
Domain does not exist<br>
En bij een bestaande domein krijg ik keurig een array terug.
Dan doe je waarschijnlijk iets niet goed in je eigen script, want dit resultaat is precies hoe 't hoort te zijn :)
Dan doe je waarschijnlijk iets niet goed in je eigen script, want dit resultaat is precies hoe 't hoort te zijn :)
Hoe hoort mn script dan te zijn? Ik wil 'm best even kopieren en uit testen namelijk :)
Laat eens zien hoe je 't nou doet? Misschien is 't een simpele aanpassing :)
Laat eens zien hoe je 't nou doet? Misschien is 't een simpele aanpassing :)
<?php
$fp = fsockopen("www.nietbestaanddomein.com", 80, $errno, $errstr, 5);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
echo "success";
}
?>
Hmm, vreemd, dat zou gewoon goed moeten gaat, zou je zeggen :)
Probeer eens zo:
<?php
$ip = gethostbyname("www.domeinnaampie123.nl");
printf("Connecting to %s:80<br>\n", $ip);
if ($fp = fsockopen($ip, 80, $errno, $errstr, 5)) {
printf("Connected...");
...
} else {
printf("Failed to connect, error %d : %s<br>\n", $errno, $errstr);
}
?>
Zie je gelijk ook 't IP waarheen die wil connecten, ben benieuwd of dat wel goed gaat.
Hmm, vreemd, dat zou gewoon goed moeten gaat, zou je zeggen :)
Probeer eens zo:
<?php
$ip = gethostbyname("www.domeinnaampie123.nl");
printf("Connecting to %s:80<br>\n", $ip);
if ($fp = fsockopen($ip, 80, $errno, $errstr, 5)) {
printf("Connected...");
...
} else {
printf("Failed to connect, error %d : %s<br>\n", $errno, $errstr);
}
?>
Zie je gelijk ook 't IP waarheen die wil connecten, ben benieuwd of dat wel goed gaat.
demo@mail:~/public_html/test$ php gethost.php
Connecting to 192.38.226.130:80<br>
Connected...
Vreemd...
Huh? Dus een niet bestaand domein krijgt ook met gethostbyname() een IP terug? :o
Huh? Dus een niet bestaand domein krijgt ook met gethostbyname() een IP terug? :o
Inderdaad..
Jurian,
Ik heb inmiddels je PHP getest (op basis van dns_get_record) en dat werkt. bedankt daarvoor. Alvorens ik nu een communicatie begin met een server, kan ik deze code dus goed gebruiken als een 'workaround'.
FSOCKOPEN geeft nog steeds een probleem zoals beschreven hierboven door Xabin. Deze default dus ook naar het eigen server-ip-adres indien een verbindig niet gemaakt kan worden...
Mja, misschien nog interessant om te weten, welke versie van PHP hebben jullie allebei geinstalleerd staan? Misschien precies dezelfde en misschien heeft die versie een bug?
En anders inderdaad maar met dns_get_record werken, iets meer werk, maar ugh, die doet teminste wat je wilt :-)
PHP Version 5.2.5
dns_get_record werkt prima. Goede tip! :) De rest doe ik dan via CURL.