# Tcpdump aktive Netzwerkverbindungen/Programme (Linux)



## Wop (8. Dez 2009)

Hallo.

Ich soll ein java programm implementieren, dass aktive Netztwerkverbindungen und dazugehörigen PID/Programmname des Rechners ausgibt und danach die Aktivitäten eines bestimmten PID's mit tcpdump auf webserver speichert.

mit netstat -antup kann man aktive Verbindungen mit PID und Programmnamen ausgeben lassen z.B.
Qullell-IP/Port Ziel-IP/Port PID/Programmname
127.0.0.1 1000 124.544.55.2 1323 3233 fireworks
127.0.0.1 1000 234.134.57.1 1343 3233 kopete 
usw.

wie soll ich jetzt weiter machen, dass ich den PID 3233 mit tcpdump überwache und vondem Netzwerkverkehr aufliste. Auf den Webserver kann ich auch mit java socket und ftp Verbindung speichern.

Danke im voraus.

Meine bisherige Code sah so aus.

```
/*
su
javac NetzwerkTool3.java
java NetzwerkTool3 -1 1
java NetzwerkTool3 PID Zeit
*/

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class NetzwerkTool3{

public static void main(String argv[]) {

if (argv.length == 2) {

while (true) { // wiederhole bis ctrl + c

Netz("/usr/sbin/tcpdump -i eth0 -qn", argv[0]);
try {
Thread.currentThread();
Thread.sleep(Integer.parseInt(arg… * 1000);// Zeitintervall für Capture

} catch (Exception e) {

}
}// end while
}// end if
else {
System.out.println("Usage: PID and TIME(second)");
}
}// end main

public static void Netz(String command, String search) {

try {

String line;
Process p = Runtime.getRuntime().exec(command); // erstelle ein neuer Prozess und führe das Kommando aus

System.out.println("Das Befehl: " + command); // zeige das ausgefügtes Kommando

BufferedReader input = new BufferedReader(new InputStreamReader(p
.getInputStream()));
// lese von ausgeführten Prozess und gib es aus.

while ((line = input.readLine()) != null) { // gib das Ergebnis aus

StringTokenizer st = new StringTokenizer(line, " "); // Zerlege die Strings(line) in Tokens

int counter = 0;
int maxCounter = st.countTokens();

String listArray[] = new String[maxCounter]; // schreib die Tokens in die Array

while (st.hasMoreTokens()) { // bis letztes Token

String tokenString = st.nextToken().toString(); // umwandeln
listArray[counter] = tokenString;
counter++;
}

if (listArray.length > 1) {

if (listArray[listArray.length - 1].equals(search)|| search.equals("-1")) { // wenn die pid gegebene pid oder -1 ist

String datei = "index.htm"; // erzeuge die Dateiname
String newLine = System.getProperty("line.separator");
String tmp = "";
String fullFile = "";
boolean exists = (new File(datei)).exists();

if (exists) { // wenn existiert, lese die Datei

BufferedReader test = new BufferedReader(
new FileReader(datei));

while ((tmp = test.readLine()) != null) { // lese die Datei

fullFile += tmp + newLine; // speichere sie in fullFile
}// end while
}// end if

System.out.println(line);
FileOutputStream ausgabe = new FileOutputStream(datei); // erzeuge die Datei um zu schreiben
DataOutputStream raus = new DataOutputStream(ausgabe);

raus.writeBytes(line + "<br>" + newLine + fullFile); // schreibe sie in die .htm Datei

Uploader();
}// end if

}// end if

}// end while

input.close();
}// end try
catch (Exception err) {
err.printStackTrace();
}

}// end Netz

private static void Uploader() {
try {
SimpleFTPUploader ftp = new SimpleFTPUploader();

// Verbindung zu FTP server mit port 21.
ftp.connect("xxx.xxx.com", 21, "xxxxxx", "xxxxxx"); //host, benutzername und password

// Setze binary mode.
ftp.bin();

// Wechsel des Arbeitsverzeichnisses in FTP Server.
ftp.cwd("");

// Upload Files von InputStream bzw. kopieren zum Server.
ftp.stor(new FileInputStream(new File("index.htm")), "index.htm");

// Trenne verbindung vom Server.
ftp.disconnect();
System.out.println("upload is ok");
} catch (Exception e) {

}
}//end Uploader

}// end NetzwerkTool3
```


----------



## HoaX (8. Dez 2009)

Wieso muss es Java sein? Ich würde netfilter passend konfigurieren und ulogd verwenden. Und wenn du die Logdatei wo hochladen musst halt noch nen Einzeiler im cron wo du z.B. ncftpput aufrufst.


----------



## Wop (10. Dez 2009)

HoaX hat gesagt.:


> Wieso muss es Java sein? Ich würde netfilter passend konfigurieren und ulogd verwenden. Und wenn du die Logdatei wo hochladen musst halt noch nen Einzeiler im cron wo du z.B. ncftpput aufrufst.



Ich brauch's aber in java


----------

