# Traffic mitschneiden und PID anzeigen lassen

## Jimini

Hey,

zunächst mal sorry für das verwirrende Topic, aber anders wusste ich mein Problem nicht knapp zu umschreiben. Ein System bei mir versucht seit geraumer Zeit, Verbindungen zu Rechnern außerhalb meines Netzes auf Port 80 und 443 aufzubauen. Diese Versuche werden von iptables zwar unterbunden, ich würde aber dennoch gerne wissen, welcher Prozess dafür verantwortlich ist.

Ich suche daher nach einer Möglichkeit, den Traffic beispielsweise 30 Minuten mitzuschneiden und danach auszuwerten. iptstate und iptraf scheinen sich hierzu nicht sonderlich zu eignen - das System arbeitet als Router, wodurch ständig deutlich mehr als 100 Verbindungen offen sind. Zudem kommen die Verbindungen ja nicht einmal zustande, da iptables dichtmacht.

Was für eine Möglichkeit gibt es also, den Prozess zu finden?

MfG Jimini

----------

## Josef.95

Schau mal ob dir net-analyzer/nethogs eventuell schon weiterhilft.

----------

## thrashed

ist das nicht ein thema für den klassiker tcpdump?

auf der firewall 30min. laufen lassen

```
tcpdump port 80 and host stoerenfriedhostname -w /genuegend/speicherplatz/pfad/outfile.cap
```

das file würde ich mir dann mit wireshark ansehen

----------

## Jimini

Bei nethogs steige ich noch nicht ganz durch. Gibt es da eine Möglichkeit, Verbindungen aufzuzeihnen? Die Manpage ist mit 36 Zeilen leider äußerst dünn.

tcpdump scheint mir leider ebenfalls nicht weiterzuhelfen, da es wohl nur die zustande gekommenen Verbindungen aufzeichnet. Ein Testlauf über rund 5 Minuten, in denen mehrere Male Verbindungsversuche nach außen auf Port 80 rejected wurden, zeigte eben diese Verbindungen nicht auf (sie kamen ja nicht zustande).

MfG Jimini

----------

## thrashed

und tcpdump am störenfried host laufen lassen?

der host muss ja zumindest ein SYN in richtung firewall schicken. egal was damit passiert, müsste dies doch trotzdem via tcpdump zu sehen sein?

----------

## Jimini

Ich habe tcpdump gestern auf dem Router selber laufen lassen, konnte allerdings in dem Dump keine IP-Adressen finden, die laut iptables-Log rejected wurden.

MfG Jimini

----------

## mokia

Wen das hauptproblem die verwerfung die packete sind, dann wie wehre es sie nicht zu verwerfen sondern umleiten

zmbs: zu eine einfache python script.

Man kann ziemlich einfach low level sockets implementieren. Dann hat das renegate process irgendetwas womit er spielen kann, und du hast irgendetwas was du loggen kanst. XD

----------

## Jimini

Das Problem ist, dass die Kisten von sich aus ohnehin keine Verbindungen aufbauen sollen und ich gerne wissen würde, welcher Prozess das ständig versucht.

MfG Jimini

----------

## mokia

Ja hab' schon verstanden, dennoch musst du es erlauben um den process zu finden.

```

#!/usr/bin/python

# -*- coding: utf-8 -*-

import socket

from subprocess import Popen,PIPE

#dises script muss auf den renegaten host laufen sonst ist die netstat ausgang unbrauchbar

#-[Piblic ip des renegaten hostes]-------------------------------------------------------------------

HOST = '192.168.1.101' 

PORT = 10001

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind((HOST, PORT))

s.listen(1)

while 1:

 conn, addr = s.accept()

 proc = Popen("netstat -p | grep tcp | grep http", stdout=PIPE, shell=True).stdout.read()

 print 'In die falle getapt', addr

 print 'netstat ausgang:'

 print proc

 print "Daten entfangen:" 

 while 1:

  data = conn.recv(1024)

  print data

  if not data: break

conn.close()

#iptables linien für den router:

#-A PREROUTING (-s 192.168.1.101) (-d 200.200.200.200) -m tcp --dport 80 -m tcp -p tcp -j DNAT --to-destination 192.168.1.101:10001 

# wo 192.168.1.101 ip des renegaten hostes ist 

#(dise regel muss den aktuellen bedarf angepasst verden in princip ist es ein spigel )

#-A POSTROUTING -o eth5 -j MASQUERADE 

#wo eth5 die interface ist wo die renegate host zu erreichen ist.

#-[ausgang]-----

#pyton # ./tcpfalle.py 

#in die falle getapt ('routerip', 53066)

#netstat ausgang:

#tcp        0      0 192.168.1.101:53066     200.200.200.200:http    ESTABLISHED 3296/busybox        

#

#Daten entfangen:

#abc

```

----------

## Jimini

Ich verstehe ehrlich gesagt nicht, was das Skript macht, kannst du das kurz erläutern? Was meinst du mit "renegaten host"?

MfG Jimini

----------

## mokia

 *Jimini wrote:*   

> .. Ein System bei mir versucht seit geraumer Zeit, Verbindungen zu Rechnern außerhalb meines Netzes auf Port 80 und 443 aufzubauen. 
> 
> .. ich würde aber dennoch gerne wissen, welcher Prozess dafür verantwortlich ist....
> 
> 

 

Es öfnet ein tcp/ip socet auf port 10001 

Wenn irgentetwas zum diesen socet kontakt aufnimt

führt es das befehl "netstat -p | grep tcp | grep http" aus

was active TCP/IP kontakte auf port 80 auslistet.

danach enfengt es maximal 1024 byte daten und spukt ales 

auf den terminal aus.

```

            |--------|          |-------------|

            |        |  LAN     | störenfried |<-----skript lauft hier 

Internet<-->| router |<-------->|  (renegat)  |

            |        |          |             |

            |--------|          |-------------|

               X-|<-------- xyprocess xyip:80 request (unbekante process)

   iptables PREROUTING ---> ipstörenfried:10001 (da hört das skript zu)

                            skript fangt die von router zurüchgespiegelte request auf

                            und schaut mit netstat nach processen die ein 

                            http request gestartet haben.

                            skript schreibt es zu terminal

                            + schriebt aus was es enfangen hat.          

```

Es mag zu komplex zu erschainen, aber es ist wichtig das das process eine aktive

konntakt herstellen kan, damit es von netstat gelistet wirt. Nur ist das nicht das 

server was es ervartet, sondern das pythonskript

Wen das störenfried der router selbst ist funktioniert es auch.

(skript an router, ip 127.0.0.1, PREROUTING zu 127.0.0.1:10001)

----------

