PDA

Tam Sürümünü Görmek İçin : Bilgisayarınıza yapılan bağlantıları raporlayan programın source code'u


Darkstar
25/11/2004, 23:49
Herkese selam,

Sizlerle kendi geliştirdiğim bir programı paylaşmak istiyorum. Bu program çok basit anlamda sizin bilgisayarınıza bağlı olan bilgisayarların IP'lerini veya NETBIOS isimlerini ve port numaralarını gösteriyor. Bunu yapabilmek için windows'ta olan "netstat" programını kullanıyor.

Programın parametreleri ile oynayarak programın kaç saat çalışacağını belirtiyorsunuz. Sizin belirttiğiniz süre içinde bilgisyarınızın tüm bağlantıları her 10 dk'da bir (bunu da değiştirebilirsiniz) inceleyerek toplam süre sonunda (siz belirliyorsunuz, N'i değiştirerek) bir text dosyasına çıktı yazıyor.

Basit bir program olmasına rağmen programlamaya yeni başlayanlar için dosya işlemleri, string parsing, vektörler ve sistem komutlarını kullanma konusunda temel bir fikir verecektir.



/************************************************** *********
* N E T G U A R D – V.1.0
*
* Written by darkstar, darkstar7619@yahoo.com
*
* Simple Windows sniffer application, which sniffs your TCP/IP connections.
* Output is written to “C:\Netguard.txt”
************************************************** *******/

#include <iostream>
#include <fstream>
#include <stdlib>
#include <string>
#include <vcl.h>
#include <stdio>
#include <iostream>
#include <dos.h>
#include <vector>
using namespace std;

const int LINESIZE = 400;

extern void ProcessInput(char *p, vector<string> &vs);
extern void RunNetGuard(vector<string> &vs);
extern void AddtoList(string &s, vector<string> &vs);
extern void WriteToFile(vector<string> &vs);



int main(int argc, char* argv[])
{
vector<string> vs;
int i, N;

// 10'dk da bir kontrol et...
// Toplam N saat çalışacak.
N = 2;
for (i=0; i<(N*6); i++)
{
printf("Checking in every 10 min.\n");
_sleep(10*60); // =10 minutes
RunNetGuard(vs);
}

WriteToFile(vs);

return 0;
}




void WriteToFile(vector<string> &vs)
{
int i;
ofstream out_file("D:\Netguard.txt");
for (i=0;i<vs.size();i++)
out_file<<vs[i]<<endl;

out_file.close();
}




void RunNetGuard(vector<string> &vs)
{
system("netstat > Netresults.txt");
char line[LINESIZE];
char *p;
int i;

ifstream myfile("Netresults.txt");

myfile.getline(line, LINESIZE, '\n'); // 1.satır -skip this
myfile.getline(line, LINESIZE, '\n'); // 2.satır -skip this
myfile.getline(line, LINESIZE, '\n'); // 3.satır -skip this
myfile.getline(line, LINESIZE, '\n'); // 4.satır -skip this

while (myfile.getline(line, LINESIZE, '\n') != 0)
{
p = strtok(line, " ");
ProcessInput(p, vs);
}

myfile.close();
}


void AddtoList(string &s, vector<string> &vs)
{
int i;
for (i=0;i<vs.size();i++)
{
if (s==vs[i])
return;
}
vs.push_back(s);
}



void ProcessInput(char *p, vector<string> &vs)
{
string s;
int i = 0;
do
{
p = strtok('\0', " ");
if (i==1)
{
if (p)
{
s = p;
AddtoList(s, vs);
}
i = 0;
return;
}
i++;
} while(p);
}


Darkstar
25/11/2004, 23:52
Kodu aktarırken syntax bozuldu, parantezler hepsi aynı sıraya geldi. Kusura bakmayın (otomatik olarak düzeltebilecek olan varsa düzeltip ekleyebilirse iyi olur).

acehreli
26/11/2004, 00:12
Simdi duzeldi :)

Koddan onceki satira [code], koddan sonraki satira da yine koseli parantezler icinde /code yazmak gerekiyor.

Ali

Arkantos
26/11/2004, 00:42
<stdlib> ve <stdio> başlıkları <cstdlib> ve <cstdio> olacak. Benim ortamımda vcl.h diye bir başlık dosyası yok.

Darkstar
26/11/2004, 08:06
soylemeyi unuttum: bu kodu borland c++ ile yazdım ve "vcl" headerı borland'ın özel bir küütphanesi. vcl'i kullanma nedenim _sleep fonksiyonunu kullanmaktı. başka bir sleep fonskiyonu bulabilirseniz, vcl'i kaldırabilirsiniz.