|
|
 |
checkdnsrr (PHP 3, PHP 4, PHP 5) checkdnsrr --
Chequea registros DNS correspondientes a un nombre de host o
dirección IP de Internet dado
Descripciónint checkdnsrr ( string host [, string tipo] )
Realiza una búsqueda DNS por registros del tipo
tipo correspondientes a
host. Devuelve TRUE si se encuentra
algún registro, devuelve FALSE si no se encontraron
registros o si un error ha ocurrido.
tipo puede ser un valor cualquiera entre:
A, MX, NS, SOA, PTR, CNAME, AAAA, A6, SRV, NAPTR o ANY. El valor
predeterminado es MX.
host puede ser la dirección IP en
notación cuaternio-puntuado o el nombre del host.
Nota:
El tipo AAAA fue agregado con PHP 5.0.0
Nota:
Esta función no está implementado en plataformas
Windows. Intente con la clase de PEAR Net_DNS.
Vea también dns_get_record(),
getmxrr(), gethostbyaddr(),
gethostbyname(),
gethostbynamel(), y la página de manual
named(8).
satmd
28-Jan-2006 08:29
fox dot 69 at gmx dot net: I wonder where you got this code from. I have written this piece of code half a year ago and released it WITH a copyright header that is missing now! Anyways... this code is to be considered licenced "as-is", however it'd be nice to keep the authors note (This is something about reputation, you see?). Thanks.
(Much) more recent version of it:
<?php
function is_blacklisted($ip) {
$result=Array();
$dnsbl_check=array("bl.spamcop.net",
"list.dsbl.org",
"sbl.spamhaus.org");
if ($ip) {
$quads=explode(".",$ip);
$rip=$quads[3].".".$quads[2].".".$quads[1].".".$quads[0];
for ($i=0; $i<count($dnsbl_check); $i++) {
if (checkdnsrr($rip.".".$dnsbl_check[$i].".","A")) {
$result[]=Array($dnsbl_check[$i],$rip.".".$dnsbl_check[$i]);
}
}
return $result;
}
}
?>
Beware that this code's signature differs from the original! I also removed osirusoft as its results are not useful anyways (false positives!). Please make sure that you have nscd or a caching dns server running as this code is prone to (d)dos! Only use it in places where it is necessary (when data is to be modified), e.g. the script processing uploads/posts/replies in a blog.
tabascopete78 at yahoo dot com
18-Aug-2005 12:30
I was using file_get_contents on a set of URLs. Some of them URLs were invalid (the structure of it was ok but the DNS hosts couldn't resolve them) and I kept getting an annoying warning that I wanted to handle correctly. I wanted to check the DNS somehow but the existing check dns function in php doesn't have one for windows and the one a person supplied here does not work 100% of the time. (The reg exp is wrong.)
Instead use gethostbyname to try to resolve a host. This won't throw any warnings, you just need to check the output and it's all handled gracefully. You'll get the same warnings with fopen and fsockopen.
The only minor drawback is that on invalid hosts it takes a couple seconds to figure it out.
Plasma
18-Jun-2005 01:43
In response to fox dot 69 at gmx dot net's dnsbl function:
<?php
function is_blacklisted($ip) {
$dnsbl_check=array("bl.spamcop.net",
"relays.osirusoft.com",
"list.dsbl.org",
"sbl.spamhaus.org");
if ($ip) {
$quads=explode(".",$ip);
$rip=$quads[3].".".$quads[2].".".$quads[1].".".$quads[0];
for ($i=0; $i<count($dnsbl_check); $i++) {
if (checkdnsrr($rip.".".$dnsbl_check[$i] . '.',"A")) {
$listed.=$dnsbl_check[$i]." ";
}
}
if ($listed) { return $listed; } else { return FALSE; }
}
}
?>
Add a . after the $dnsbl_check[$i] so that it returns a valid response, I found this was not working (always returned the A record) when I didnt specify the . at the end:
if (checkdnsrr($rip.".".$dnsbl_check[$i] . '.',"A")) {
Sven
07-Feb-2005 05:46
Note to Patrick's regular expression (from 14-Dec-2004):
Don't use it as it will not recognize every valid email address, because valid domain names do not pass the regex.
For example: test--domain.com is a perfectly valid domain, but won't be recognized as such.
If you have to use a regular expression as a first filter, then either use the complete complex form based on RFC2822, or stick to the most basic regex like this:
".+@.+\..+."
Explanation: The username in front of the @ can include every known character in the world - it has to be escaped somehow, but dealing with this is a mess.
The shortest possible domain name is 1 character long, not 2 or 3 (although many registries impose such arbitrary rules on domain names). Try www.x.org if you don't believe this. :)
Only the top level domain consists of at least 2 characters (country code tld), but there should be no upper limit. Many had to learn the hard way as .info became available. And .museum. Maybe there will be .solarsystem someday.
So the shortest possible email address consists of 6 characters: "a@b.cd".
I do not use more specific character classes for the domain names because we have international domain names, which opens up the whole unicode range as valid characters. Converting these into useable dns domain names is a different task, best left to appropriate librarys such as PEAR's Net_IDNA.
Rule of thumb: Don't assume too much. If a string doesn't contain an "@"-sign and a dot after that, then it surely is no email address, and no further checking needs to take place. Everything else should go one step further.
Patrick
13-Dec-2004 07:53
This is a little code example that will validate an email address in two ways:
- first the general syntax of the string is checked with a regular expression
- then the domain substring (after the '@') is checked using the 'checkdnsrr' function
<?php
function validate_email($email){
$exp = "^[a-z\'0-9]+([._-][a-z\'0-9]+)*@([a-z0-9]+([._-][a-z0-9]+))+$";
if(eregi($exp,$email)){
if(checkdnsrr(array_pop(explode("@",$email)),"MX")){
return true;
}else{
return false;
}
}else{
return false;
}
}
?>
dave146 at burtonsys dot com
20-Jun-2004 11:46
The .museum TLD is weird. All undefined second-level domains resolve to 195.7.77.20 (a/k/a index.museum). So checkdnsrr() doesn't tell you anything at all about second-level domains under .museum.
-Dave
Editors note:
This applies to all TLDs that have a wildcard covering all non-existant domains. This may at some point in the future include .com or .net and does already cover other domains. If you are unsure just try a couple of random domains that can't possibly exist. If they both resolve to the same IP address and checkdnserr() returns false, you may have to check the IP.
picaune at hotmail dot com
31-Jan-2004 06:58
On Windows NT machines (inc. 2000, XP, 2003, .net, Longhorn) you can emulate this function by spoonfeeding the nslookup proglet.
After spitting out some info on which DNS server it's using, the daemon presents a "> " prompt. At this point if you enter a domain name a list of A records will be returned from the default name server. The sixth line of output has "Address: " followed by the IPv4 address in dotted-quad notation. You may enter "set type=" followed by the IP type. Currently the only supported IP class is IN (Internet); the others are no longer supported. You can exit by entering "exit".
You may perform a one-shot lookup by passing the domain name as a command line argument; in this case nslookup will automatically perform an A lookup on the default name server and exit. The IPv4 address is on the last line with non-whitespace.
Additional information and options can be obtained by running nslookup and then searching for "?".
fox dot 69 at gmx dot net
01-May-2003 01:40
maybe usefull, a blacklist (DNSBL) check function:
<?php
function is_blacklisted($ip) {
$dnsbl_check=array("bl.spamcop.net",
"relays.osirusoft.com",
"list.dsbl.org",
"sbl.spamhaus.org");
if ($ip) {
$quads=explode(".",$ip);
$rip=$quads[3].".".$quads[2].".".$quads[1].".".$quads[0];
for ($i=0; $i<count($dnsbl_check); $i++) {
if (checkdnsrr($rip.".".$dnsbl_check[$i],"A")) {
$listed.=$dnsbl_check[$i]." ";
}
}
if ($listed) { return $listed; } else { return FALSE; }
}
}
?>
kriek at jonkriek dot com
25-Mar-2003 05:08
The checkdnsrr function is not implemented on the Windows platform. The way to get around this problem is to write your own version of checkdnsrr. Example: myCheckDNSRR
<?php
function myCheckDNSRR($hostName, $recType = '')
{
if(!empty($hostName)) {
if( $recType == '' ) $recType = "MX";
exec("nslookup -type=$recType $hostName", $result);
foreach ($result as $line) {
if(eregi("^$hostName",$line)) {
return true;
}
}
return false;
}
return false;
}
?>
Note that the type parameter is optional, and if you don't supply it then the type defaults to "MX" (which means Mail Exchange). If any records are found, the function returns TRUE. Otherwise, it returns FALSE.
23-Jul-2002 06:45
<?php
function checkdnsrr_winNT( $host, $type = '' )
{
if( !empty( $host ) )
{
if( $type == '' ) $type = "MX";
@exec( "nslookup -type=$type $host", $output );
while( list( $k, $line ) = each( $output ) )
{
if( eregi( "^$host", $line ) )
{
return true;
}
}
return false;
}
}
function getmxrr_winNT( $hostname, &$mxhosts )
{
if( !is_array( $mxhosts ) ) $mxhosts = array();
if( !empty( $hostname ) )
{
@exec( "nslookup -type=MX $hostname", $output, $ret );
while( list( $k, $line ) = each( $output ) )
{
if( ereg( "^$hostname\tMX preference = ([0-9]+), mail exchanger = (.*)$", $line, $parts ) )
{
$mxhosts[ $parts[1] ] = $parts[2];
}
}
if( count( $mxhosts ) )
{
reset( $mxhosts );
ksort( $mxhosts );
$i = 0;
while( list( $pref, $host ) = each( $mxhosts ) )
{
$mxhosts2[$i] = $host;
$i++;
}
$mxhosts = $mxhosts2;
return true;
}
else
{
return false;
}
}
}
if ( getmxrr_winNT( "microsoft.com", $hosts ) )
{
echo count($hosts)."<br>";
for ($i=0; $i<=count($hosts); $i++){
echo $hosts[$i];}
}
?>
alex at xela dot co dot uk
01-Mar-2002 05:36
Hi,
Interesting thing I've discovered regarding checkdnsrr. When querying a domain's status using the command, always append a dot to the end of the domain you are querying. I.e.
<?php
checkdnsrr($domain.'.')
?>
The dot is sometimes necessary if you are searching for a fully qualified domain which has the same name as a host on your local domain.. ie :-
You want to search for "our.info"
and you happen to have a node on your domain called :
our.info.ourdomain.com
If your DNS server is told to check 'ourdomain.com' before any other you will get a positive result when in fact our.info might not exist.
For this reason adding the dot enforces the root. Of course the dot does not alter results that were OK anyway.
Hope that helps some poor confused people :o)
Alex.
| |
| | Citas célebres | La ciencia es maraillosa si uno no tiene que ganarse la vida con ella. Albert Einstein Físico estadounidense (1879-1955) | | Citas en tu mail | | ©Contenidos Gratis |
| Chiste de... Médicos | | Seguridad Social | A un tío le hacen un análisis de sangre en el que le tienen que sacar medio litro. El tío se queda hecho polvo, pero como era por la seguridad social el doctor dice a la enfermera:
- Déle a este hombre un dedal de vino y una aceituna.
El paciente, mosqueado:
- Oiga, ¿y no tendría un sello por ahí?
- ¿Y eso?
- Es que durante las comidas acostumbro a leer un poco. | | Chistes en tu mail | | ©ContenidosGratis |
| Inicio | Acción | Estrategia | Palabras | Puzzles | Solitarios | Foro Trucos |  | Cake Mania Jugadores: 6835 Categoría del juego: Acción Objetivo del juego: Ayuda a Jill a recuperar la pastelería de su abuela llevando su propia pastelería; consigue clientes y gana dinero. |
|  | Rainbow Web Jugadores: 2199 Categoría del juego: Puzzles Objetivo del juego: Rompe un pegajoso hechizo y salva un reino de fantasía en Rainbow Web. Tendrás toneladas de diversión mientras juegas a este mágico desafío para la mente. |
|  | Mahjongg Fortuna Jugadores: 12462 Categoría del juego: Solitarios Objetivo del juego: Velocidad y habilidad mental son las armas más importantes en esta versión de un antiguo juego asiático. Despeja el tablero lo antes posible haciendo clic en las fichas iguales y gánate la fama eterna de la puntuación más alta. |
|  | Chainz 2 Jugadores: 6955 Categoría del juego: Puzzles Objetivo del juego: Entra en el mundo de las combinaciones con Chainz 2: Relinked, emocionante secuela del exitazo del año pasado, Chainz. Gira eslabones y crea combinaciones de 3 ó más. |
|  | Delicious Jugadores: 4405 Categoría del juego: Acción Objetivo del juego: ¿Eres un as de la multitarea? ¿Quieres que tus clientes estén contentos? ¡Pues Delicious es tu juego! Sacia el apetito de los clientes y tenlos contentos; ¡no te arriesgues! |
|  | Bookworm Jugadores: 4568 Categoría del juego: Palabras Objetivo del juego: Junta las letras para formar palabras. ¡Las palabras más largas valen más puntos! |
|  | Zuma Jugadores: 4976 Categoría del juego: Acción Objetivo del juego: Controla el ídolo de la rana de piedra de los antiguos Zuma en este intrigante enigma de acción. ¡Dispara bolas para formar conjuntos de tres, pero si dejas que lleguen a la calavera dorada morirás! |
|  | Jewel of Atlantis Jugadores: 3798 Categoría del juego: Puzzles Objetivo del juego: Descubre la ciudad hundida de la Atlántida y busca valiosos tesoros. Viaja más allá de las profundidades del mar y vive trepidantes aventuras en Jewel of Atlantis. |
|  | Jewel Quest Jugadores: 3727 Categoría del juego: Puzzles Objetivo del juego: Convierte la arena de la antigua selva en oro tan rápido como puedas juntando grupos de 3 elementos. ¡Los grupos más grandes valen más puntos! |
|  | Bejeweled 2 Jugadores: 3659 Categoría del juego: Puzzles Objetivo del juego: Con cuatro modos de juego únicos y fascinantes, nuevas piezas de juego explosivas e imponentes fondos planetarios, Bejeweled 2 es mucho más adictivo que nunca. |
|
|