PDA

Bekijk Volledige Versie : DNS error - Default VPS server bij geen verbinding?



Concepts
15/11/08, 18:06
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!

oehTie
15/11/08, 18:54
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?

Concepts
15/11/08, 19:40
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.

gjtje
15/11/08, 19:43
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.

Concepts
15/11/08, 19:57
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?

Concepts
15/11/08, 20:34
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?

Concepts
15/11/08, 21:04
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?

Jurian
15/11/08, 21:16
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.

Concepts
15/11/08, 21:25
Geweldig, ga dat even proberen. Moet de server voor in reboot, vrees ik... Morgenochtend maar even heel erg vroeg op dan :)

Bedankt Jurian!

Jurian
15/11/08, 21:28
Reboot is nergens voor nodig, 't is geen windows :p

hooguit even bind en apache restarten, dat zou genoeg moeten zijn :-)

xabin
15/11/08, 21:50
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

Concepts
15/11/08, 22:01
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 :)

Jurian
15/11/08, 22:14
Doe eens een "dig +trace -t A www.ditdomeinbestaatniet.nl" en plak de volledige output is hier?

en ook "host www.ditdomeinbestaatniet.nl" ? :)

Concepts
15/11/08, 23:29
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)

Jurian
16/11/08, 10:11
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 :)

xabin
16/11/08, 13:07
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.

Jurian
16/11/08, 22:04
Dan doe je waarschijnlijk iets niet goed in je eigen script, want dit resultaat is precies hoe 't hoort te zijn :)

xabin
17/11/08, 08:51
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 :)

Jurian
17/11/08, 09:03
Laat eens zien hoe je 't nou doet? Misschien is 't een simpele aanpassing :)

xabin
17/11/08, 14:43
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";
}
?>

Jurian
17/11/08, 17:06
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.

xabin
17/11/08, 19:16
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...

Jurian
18/11/08, 12:20
Huh? Dus een niet bestaand domein krijgt ook met gethostbyname() een IP terug? :o

xabin
18/11/08, 22:09
Huh? Dus een niet bestaand domein krijgt ook met gethostbyname() een IP terug? :o

Inderdaad..

Concepts
18/11/08, 22:48
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...

Jurian
19/11/08, 13:38
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 :-)

Concepts
19/11/08, 23:33
PHP Version 5.2.5

dns_get_record werkt prima. Goede tip! :) De rest doe ik dan via CURL.