Ich hab zwar gesucht, aber nichts passendes gefunden...
Ist ein IP-Trace per Python.cgi möglich? Oder nur unter richtig viel Aufwand?
Da fällt mir gerade ein, man könnte natürlich versuchen online die ApacheLogFiles zu durchsuchen... Aber das wird viel frickelei, schätze ich...
s. Scratchy is an Apache Web Server log parser and HTML report generator written in Python: http://scratchy.sourceforge.net
IP-Trace mit Python?
Was genau stellst Du Dir denn vor? Die Remote-Adresse bekommst Du ja via cgi. Mit der könntest Du dann ja traceroute starten, und dessen Ausgabe zum Browser umleiten, oder stellst Du Dir etwas ganz anderes vor?
fs111
fs111
Pydoc-Integration in vim - Feedback willkommen: http://www.vim.org/scripts/script.php?script_id=910
Hi. Wesentlich leiter hättest du es dann aber, du müsstest schließlich nur die ausgabe umleiten:
So musst du es allerdings schaffen, ICMP Pakete mit einer variablen TTL zu versenden. Ein ICMP Paket wird in seinem TTL Wert von jedem Host um eins verringert und wenn es gleich 0 ist wird es gelöscht. Damit kannst du "messen" (das Grundprinzip von traceroute). Schau dir mal dieses PDF an, da hab ich was hübsches drin gesehen. Vielleicht bekommst du es damit hin. Ebenfalls interessant wäre vielleicht pycap.
Code: Alles auswählen
import os
ci,co,ce=os.popen3("tracert www.yahoo.de")
ci.close()
e=ce.read()
if not e:
print co.read()
else:
print e
ce.close()
co.close()
Zuletzt geändert von Milan am Freitag 13. August 2004, 09:20, insgesamt 1-mal geändert.
Hallo genrich,
schon mal nach 'traceroute.py' gegoogelt? Bei mir klappt's!
Gruß!
Jörg
schon mal nach 'traceroute.py' gegoogelt? Bei mir klappt's!
Gruß!
Jörg
"Sie sind nicht berechtigt, unrechtmäßige Kopien dieses Datenträgers zu erstellen." - Microsoft-Weisheit auf einer CD von MS-VisualC++-6.0
Hi ein wenig buggy, wenn die Pakete mal ne andere Strecke nehmen und der TTL-Wert dadurch anders fällt:
Ich würde das unbedingt umbauen, sodass gespeichert wird, wo das Paket schon war. Außerdem würde ich die Ausgabe rausnehmen und extra machen, ein Iterator über die Routenabschnitte wäre nicht schlecht. Ich mach mich nachher mal ans werkeln...
Code: Alles auswählen
>>> traceroute("www.wikipedia.de")
Tracing route to 207.142.131.236 (www.wikipedia.de)
1 2.1 1.8 1.8 192.168.6.1
2 63.5 61.8 62.4 217.5.98.77
3 59.5 59.0 33.1 216.109.118.73 p10.www.dcn.yahoo.com
4 146.4 147.1 147.5 62.154.14.53 nyc-e5.NYC.US.net.DTAG.DE
5 145.6 147.5 146.6 65.59.192.5
6 147.1 147.4 146.6 64.159.1.181 ge-0-3-0.bbr1.NewYork1.Level3.net
7 163.1 15.5 163.3 209.247.11.198 as-0-0.mp2.Tampa1.Level3.net
8 185.0 186.8 187.1 209.247.11.218 ge-9-1.hsa1.Tampa1.Level3.net
9 186.4 187.1 186.4 63.208.0.94 unknown.Level3.net
10 * 100.4 * 216.109.118.73 p10.www.dcn.yahoo.com
11 163.9 * 183.8 216.109.118.73 p10.www.dcn.yahoo.com
12 * 168.8 * 216.109.118.73 p10.www.dcn.yahoo.com
13 165.8 * 169.8 216.109.118.73 p10.www.dcn.yahoo.com
14 * 166.1 * 216.109.118.73 p10.www.dcn.yahoo.com
15 166.2 583.1 395.8 216.109.118.73 p10.www.dcn.yahoo.com
16 633.9 55.5 62.8 217.5.98.77
17 681.0 * 182.1 216.109.118.73 p10.www.dcn.yahoo.com
18 * 170.6 * 216.109.118.73 p10.www.dcn.yahoo.com
19 139.1 12.9 * 216.109.118.73 p10.www.dcn.yahoo.com
20 167.2 181.5 194.9 209.247.11.198 as-0-0.mp2.Tampa1.Level3.net
21 585.8 362.9 181.7 209.247.11.218 ge-9-1.hsa1.Tampa1.Level3.net
22 159.8 256.6 726.3 63.208.0.94 unknown.Level3.net
23 159.3 74.8 100.5 63.208.0.94 unknown.Level3.net
24 * 50.7 * 216.109.118.73 p10.www.dcn.yahoo.com
25 164.0 * 171.6 216.109.118.73 p10.www.dcn.yahoo.com
26 * 170.1 * 216.109.118.73 p10.www.dcn.yahoo.com
27 155.2 * 180.7 216.109.118.73 p10.www.dcn.yahoo.com
28 * 171.8 * 216.109.118.73 p10.www.dcn.yahoo.com
29 168.1 * 180.0 216.109.118.73 p10.www.dcn.yahoo.com
30 * 165.4 * 216.109.118.73 p10.www.dcn.yahoo.com
Verdammt ich hab immer nach "Python traceroute" u.ä. gesucht...joerg hat geschrieben: schon mal nach 'traceroute.py' gegoogelt? Bei mir klappt's!
Thx...
Doch es funktioniert auf dem Server nicht, Traceback:
Code: Alles auswählen
s2 = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
socket.error: (1, 'Operation not permitted')
Etwas stutzig machen mich die Zeile mit "if sys.platform in ['win32']:"
Code: Alles auswählen
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
if sys.platform in ["win32"]:
s.setsockopt(socket.SOL_SOCKET, socket.SO_RCVTIMEO, 300)
s.setsockopt(socket.SOL_IP, socket.IP_TTL, ttl)
s2 = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
s2.bind(('',qport))
if sys.platform in ["win32"]:
s2.setsockopt(socket.SOL_SOCKET, socket.SO_RCVTIMEO, 300)
In einer Antwort ( http://mail.python.org/pipermail/python ... 54755.html ) steht das man bei Linux Root rechte benötigt um einen solchen socket zu öffnen.... Scheiße...
Ha!
Was ich suchte hab ich durch das Skript doch herrausgefunden... Und es ist wieder so einfach
Das war die Information die ich eigentlich haben wollte und das klappt auch auf dem Server!
Was ich suchte hab ich durch das Skript doch herrausgefunden... Und es ist wieder so einfach
Code: Alles auswählen
import os,socket
REMOTE_ADDR =os.environ["REMOTE_ADDR"]
print REMOTE_ADDR," - ",socket.gethostbyaddr(REMOTE_ADDR)
Um den Domainnamen rauszubekommen würde ich lieber socket.getfqdn nehmen, das ist besser... Versuch mal folgende IP auflösen zu lassen "217.5.98.77" Aber ansonsten frag mal besser beim nächsten mal direkt, auch wenn man hier über traceroute einiges mehr lernt.
Hm!
Mit socket.getfqdn() erhalte ich die IP-Adresse zurück und mit socket.gethostbyaddr() erhalte ich ein "socket.herror: (11004, 'host not found')"
Liefert getfqdn() automatich einfach die IP-Adresse zurück, statt eines Fehlers? Also im Prinzip das selbe, wenn man den Fehler bei gethostbyaddr() abfangen würde? Oder steckt da mehr hinter?
Und vorallem, warum ist das bei dieser IP-Adresse?
Mit socket.getfqdn() erhalte ich die IP-Adresse zurück und mit socket.gethostbyaddr() erhalte ich ein "socket.herror: (11004, 'host not found')"
Liefert getfqdn() automatich einfach die IP-Adresse zurück, statt eines Fehlers? Also im Prinzip das selbe, wenn man den Fehler bei gethostbyaddr() abfangen würde? Oder steckt da mehr hinter?
Und vorallem, warum ist das bei dieser IP-Adresse?
Hi. Die Docu dazu sollte eigentlich alles sagen:
Versucht einen Hostnamen zu name (als name oder Adresse) zu finden und gibt bei Misserfolg name selbst zurück. Es gibt IP-Adressen, die haben keinen Domainnamen, den man per DNS erfragen könnte. So zum Beispiel mein Router (intern) oder der obige Server von T-Online. Das heißt aber nicht, dass es solche Adressen nicht gibt, sonst könnte ich z.B. nicht im Internet surfen. gethostbyaddr geht aber davon aus, dass es einen Domainname gibt und gibt deswegen eine Fehler, wenn das nicht der Fall ist. Schau dir dazu ruhig den Quellcode von getfqdn an .getfqdn([name])
Return a fully qualified domain name for name. If name is omitted or empty, it is interpreted as the local host. To find the fully qualified name, the hostname returned by gethostbyaddr() is checked, then aliases for the host, if available. The first name which includes a period is selected. In case no fully qualified domain name is available, the hostname is returned. New in version 2.0.