Conversion d'un programme Python en C++
Bonjour,
voilà, voici le programme originale Python:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| def dnsspoof():
s=socket.socket(); s.connect(("bash.org",80));
me="".join(chr(int(x)) for x in s.getsockname()[0].split("."))
print "Please set your DS's DNS server to",s.getsockname()[0]
dnsserv=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
dnsserv.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
dnsserv.bind(("0.0.0.0",53))
while True:
r=dnsserv.recvfrom(512)
s=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('4.2.2.2', 53))
s.send(r[0])
rr=s.recv(512)
if "gamestats2" in rr: rr=rr[:-4]+me
dnsserv.sendto(rr, r[1]) |
Maintenant, j'ai essayé de le retranscrire en C++:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
class DnsSpoof: public QThread {
void run() {
//On suppose que je connais déjà mon ip
QString ip = QString("192.168.1.20");
QString me("") = QChar(192)+QChar(168)+QChar(1)+QChar(20);
char data[512];
QHostAddress ad;
quint16 port;
QUdpSocket *dnsServer = new QUdpSocket();
dnsServer->bind(QHostAddress::Any, 53);
while(1) {
while(!dnsServer->hasPendingDatagrams());
int val = dnsServer->readDatagram(data, 512, &ad, &port);
QUdpSocket *s = new QUdpSocket();
s->connectToHost(QHostAddress("4.2.2.2"), 53);
s->write(data,val);
while(!s->hasPendingDatagrams());
s->readDatagram(data, 512);
QString str(data);
if(str.contains("gamestats2")) {
qDebug() << "yeah";
str = str.replace(str.length()-4, 4, me);
}
dnsServer->writeDatagram(str.toStdString().c_str(),ad,port);
}
}
}; |
Cependant le résultat attendu n'est pas le même:
Le but est de dérouter la connexion d'une Nintendo DS à un serveur, en le faisant croire que mon application est le serveur. Pour cela, dans la configuration de connexion de ma Nintendo DS, je met le DNS à mon ip locale : 192.168.1.20.
Et en tentant de se connecter, j'intercepte depuis mon programme les données transmises, et ainsi faire croire à l'appareil que je suis le serveur Nintendo, et lui renvoyer de fausses informations. Pour cela, un dns spoof est necessaire, et en parallèle d'ouvrir un serveur sur le port 80 (j'ai pas mis le code, ça vient pas de ça) pour traiter les requêtes qui se font en HTTP.
Le programme en python fonctionne, mon pc intercepte, et reçoit bien comme client la DS. Donc le DNS spoof fonctionne, mais avec le programme Qt, le programme ne reçoit pas de données, et rien ne se passe dans le DNS Spoof...
Donc, si quelqu'un de bon en réseau, python, et C++/Qt saurait pourquoi... (je sais ça fait beaucoup)