Sie könnten ein Programm schreiben, um / proc / net / tcp zu überwachen, dessen Ausgabe so aussieht:
obi-wan ~ # cat /proc/net/tcp
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
0: 00000000:0050 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 4847458 1 e6060560 300 0 0 2 -1
1: 00000000:04D2 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 4847477 1 f2e64da0 300 0 0 2 -1
2: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 7109 1 f2e65ac0 300 0 0 2 -1
3: 0100007F:177A 00000000:0000 0A 00000000:00000000 00:00000000 00000000 1000 0 4864457 1 d2726540 300 0 0 2 -1
4: 00000000:01BB 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 4847462 1 e60609c0 300 0 0 2 -1
5: 6B00A8C0:0016 30F4B5CA:C3AB 01 00000044:00000000 01:00000031 00000000 0 0 4982752 3 f2e64940 55 4 0 2 -1
6: 0100007F:B143 0100007F:BC5E 01 00000000:00000000 00:00000000 00000000 1000 0 2130283 1 d59cce40 21 4 1 2 -1
7: 0100007F:BC5E 0100007F:B143 01 00000000:00000000 00:00000000 00000000 1000 0 2130285 1 d59cd2a0 21 4 0 2 -1
8: 6B00A8C0:0016 3276C35B:8E11 01 00000000:00000000 02:000ADAB1 00000000 0 0 4982629 2 d2727260 40 4 8 2 2
9: 6B00A8C0:0016 6500A8C0:DD5D 01 00000538:00000000 01:00000029 00000000 0 0 4864416 5 e6061b40 42 12 27 3 -1
Sie können dann geöffnete Ports mit Inodes verknüpfen, die mit Prozessen und Dateideskriptoren verknüpft werden können, indem Sie für die für jeden Prozess aufgelisteten Dateideskriptoren einen Readlink ausführen:
obi-wan ~ # readlink /proc/28850/fd/3
socket:[4847458]
Sehen Sie hier, dass Inode 4847458 dem ersten TCP-Socket in der obigen Liste entspricht. Die Ausgabe von netstat -tapn überprüft dies für mich (und erinnert daran, dass 0x50 == 80):
obi-wan ~ # netstat -tapn
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 28850/cherokee-work
Wenn das Überwachungsprogramm eine Änderung in / proc / net / tcp feststellt, analysieren Sie die Daten und stellen Sie fest, ob es sich bei der Änderung um einen neu geöffneten Socket handelt. Dann können Sie einfach alle Dateideskriptoren für jeden in / proc aufgelisteten Prozess auflisten und jeweils einen Readlink ausführen, um den passenden Inode zu finden. Sobald Sie dies gefunden haben, haben Sie die PID, von der Sie alles bekommen können, was Sie sich wünschen, besonders wenn Sie über eine Prozessabrechnung verfügen.
Wenn Sie nicht möchten, dass Ihre Benachrichtigung sofort angezeigt wird, kann Ihr Monitorprogramm eine langsame Abfrage verwenden (möglicherweise eine Zeitspanne von 50 ms oder 100 ms oder sogar 1000 ms).