Kategori Sprachen

nslookup for validate e-mail

Montag, September 8th, 2008

Da hat mich Chef doch mal wieder auf eine Interessante Idee gebracht. Um zu überprüfen ob eine E-Mail Adresse existiert, haben wir einen nslookup auf den MX Eintrag der Domain gemacht. So finden wir heraus ob eine E-Mail überhaupt zugestellt werden kann.

Dies könnte man jetzt noch weiter übertreiben, indem man eine Verbindung nach 25 aufmacht und testet ob der Empfänger existiert. Dies ist aber auf Grund von Graylisting und co. nicht möglich.

function nslookupMX($email)
{
  list($user,$domain) = split("@",$email);
  //TODO: NSLOOKUP php function nutzen
  exec('nslookup -q=mx '. $domain, $nslookup);
  // Non-authoritative answer
  // NXDOMAIN
  foreach($nslookup as $value)
  {
    // Schlüssel wörter von nslookup feddora 9 ggf. anpassen. 
    if(strpos($value, 'NXDOMAIN') || strpos($value, 'Non-authoritative'))
    {
      return false;
    }
  }
  return true;
}

Beispiel Code! Code so nicht im Einsatz! Durch die excec function ist die function anfällig für hecking.

Überladen von Operatoren

Freitag, Februar 8th, 2008

Bei meinen Prüfungsvorbereitungen bin ich auf ein c++ Kapitalmittel gestoßen, dass ich noch nie zuvor gesehen habe. Mann braucht ein paar Minuten um es erst mal zu verstehen was dort geschieht. Aber beim zweiten hinsehen versteht man, was man mit der Methode bool operator == (const Uvo& op2) const; machen kann.

#include <iostream>

using namespace std;

//Überladen Von Operatoren
class Uvo
{
public:
    int wert1, wert2;
    Uvo();
    bool operator == (const Uvo& op2) const;
};

Uvo::Uvo()
{
    wert1 = wert2 = 0;
}

bool Uvo::operator == (const Uvo& op2) const
{
    if(wert1 == op2.wert1 && wert2 == op2.wert2)
         return true;
    return false;
}

int main()
{
    Uvo *oop1 = new Uvo();
    Uvo *oop2 = new Uvo();

    oop1->wert1 = 10;
    oop1->wert2 = 20;

    if (*oop1 == *oop2)
        cout << "Die Werte sind gleich\n";
    else
        cout << "Die Werte sind unterschiedlich\n";

    oop2->wert1 = 10;
    oop2->wert2 = 20;

    if (*oop1 == *oop2)
        cout << "Die Werte sind gleich\n";
    else
        cout << "Die Werte sind unterschiedlich\n";

    return 0;
}

Quelle: cpp-tutor.de

GIP 11

Montag, Dezember 17th, 2007
#include 

using namespace std;

void datumEinlesen(short &tag, short &monat, short &jahr);

short codewertMonat(short monat, short jahr);

bool schaltjahr(short jahr);

string ermittleWochentag(short ergebnis);


int main(void)
{
	short tag, monat, jahr;
	double ret;

	datumEinlesen( tag, monat, jahr );

	ret = jahr + (int)(jahr / 4);
		
	ret = ret + codewertMonat( monat, jahr ) + tag;
	ret = (int)ret%7;

	cout << "Dieser Tag war ein " << ermittleWochentag(ret) << endl << endl;

	return 0;
}

void datumEinlesen(short &tag, short &monat, short &jahr)
{
	int tage[] = { 	31, 28, 31, 30, 31, 30, 
					31, 31, 30, 31, 30, 31 };
	if( schaltjahr(jahr) )
	{
		tage[1] = tage[1] + 1;
	}

	do 
	{
		cout << "Datum eingeben:\nTag   = ? ";
		cin >> tag;
	
		cout << "Monat = ? ";
		cin >> monat;
	
		cout << "Jahr  = ? ";
		cin >> jahr;

		if(jahr <= 99 && jahr >= 1)
			if( monat <= 12 && monat >= 1 )	
				if(tag <= tage[monat - 1] && tag >= 1)
					break;
	} 
	while(true);		
}

short codewertMonat(short monat, short jahr)
{
	// Codewert des Monats 
	// Juni                0 Mai                     4
	// September, Dezember 1 August                  5
	// April, Juli         2 Februar, März, November 6
	// Januar, Oktober     3
	int cwm[] = {3,6,6,2,4,0,2,5,1,3,6,1};
	
	if( schaltjahr(jahr) )
	{
		cwm[0] = cwm[0] -1;
		cwm[1] = cwm[1] -1;
	}
	 
	return cwm[monat - 1];
}

bool schaltjahr(short jahr)
{
	if(jahr%4 == 0 && jahr%100 != 0)
	{
		return true;
	}
	return false;
}

string ermittleWochentag(short ergebnis)
{
	// Donnerstag 0
	// Freitag    1
	// Samstag    2
	// Sonntag    3
	// Montag     4
	// Dienstag   5
	// Mittwoch   6

	string wochentag[] = {	"Donnerstag", "Freitag", "Samstag", "Sonntag", 
						 	"Montag", "Dienstag", "Mittwoch" };
	return wochentag[ergebnis];
}

GIP 10

Montag, Dezember 10th, 2007
#include 

using namespace std;

const int anfangsbestand = 13;

int rehe_i(int jahr)
{
	int reh = anfangsbestand;

	for(int i=1; i <= jahr ; i++)
	{
		cout << reh << " -> ";

		reh = ((reh * 3) - 10);
		if(reh > 40)
			reh = reh - (reh * 0.6);

		cout << reh << endl;
	}

	return reh;
}

int rehe_r(int jahr, int reh=anfangsbestand)
{
	cout << reh << " -> ";
	
	reh = ((reh * 3) - 10);
	if(reh > 40)
		reh = (reh - (reh * 0.6));

	cout << reh << endl;

	if(jahr <= 1)
		return reh;
	return rehe_r(--jahr, reh);
}


int main ()
{
	cout << "Iterativ: Ende des 3. Jahres: " << rehe_i(3) << " Rehe\n";
	cout << "Rekursiv: Ende des 3. Jahres: " << rehe_r(3) << " Rehe\n";
	return 0;
}

GIP 9

Montag, Dezember 3rd, 2007
#include 
#include 

using namespace std;

int power_of(int basis, int exponent=2)
{
	long int retur = basis; 

	if(basis == 0)
		return false;
	
	for( int i=1; i <= exponent; i++ )
		retur = retur * basis;

	return retur;
}

int biner(int zahl)
{
	const short binerstellen = 8;
	int max = power_of( 2, binerstellen );
	//cout << max << endl;	
	long int bin = 0;

	for( int i=binerstellen; i>=0; i-- )
	{
		if(zahl >= max)
		{
			bin = bin + power_of(10, i);			
		}
		cout << bin << " -> " << i << endl;
		
		max = max / 2;
	}
	return bin;
}

int oktal(int zahl)
{
	//string oktalziffer[8]={"0","1","2","3","4","5","6","7"};
	return 0;	
}

int main(void)
{
	int zahl;

	cout << "Dezimalzahl = ? ";
	cin >> zahl;
	cout << "Umrechnung einer ganzzahligen, positiven Dezimalzahl in" << endl << 
			"- eine Dualzahl nach der Potenzenmethode : Dualzahl    = " << biner(zahl) << endl <<
			"- eine Oktalzahl nach der Restwertmethode: Oktalzahl   = " << oktal(zahl) << endl;
	return 0;
}