Probleme bei Abfrage der internen IP

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Hallo,
ich habe ein Problem bei der Suche nach der internen IP.

Code: Alles auswählen

import socket;
print socket.getaddrinfo(socket.gethostname(), None)[0][4][0]
liefert mir den Fehler:
AttributeError: getaddrinfo

Bei anderen Usern gelingt das.
Woran könnte das bei mir liegen?

MfG dieter1a
BlackJack

Schau mal wie Dein Skript heisst. Da Du nicht den ganzen Traceback zeigst muss ich raten, aber ich würde mal auf `socket.py` tippen. Falls dem so ist, rate Du mal was mit dem ``import`` importiert wird. ;-)
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Du hast nicht zufaellig eine datei socket.py in deinem Working Dir rumfliegen?
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Python 2 ist die interne Scriptsprache bei Blender 2.25.
Installiert habe ich deswegen Python 2.0.1, weil Blender 2.25 grundsätzlich nur mit Python 2 umgehen kann.
Die Obige Abfrage ist also in Blender eingebaut und liefert mir den Fehler auf der Konsole.
Ein anderer Blender-User sagte mir im Forum, dass das Script bei ihm klappt.
Es ist erstmal nur eine Testabfage um überhaupt mal weiter zu kommen.
Externe UDP-Verbindung klappt bei meinem Multi-User Spiel hervorragend.
Aber fürs Intranet brauche ich die internen IP`s.
Das krieg ich leider nicht auf die Reihe.
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Rebecca hat geschrieben:Du hast nicht zufaellig eine datei socket.py in deinem Working Dir rumfliegen?
Das verstehe ich nicht so ganz!
Ein Script mit diesem namen gibt es in meiner Produktion nicht.
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

BlackJack hat geschrieben:Schau mal wie Dein Skript heisst. Da Du nicht den ganzen Traceback zeigst muss ich raten, aber ich würde mal auf `socket.py` tippen. Falls dem so ist, rate Du mal was mit dem ``import`` importiert wird. ;-)
Echt keine Ahnung, was ich da jetzt raten soll.
BlackJack

Was sagt denn ein:

Code: Alles auswählen

import socket
print dir(socket)
print socket
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

'AF_APPLETALK', 'AF_INET', 'AF_IPX', 'AF_UNSPEC', 'INADDR_ALLHOSTS_GROUP', 'INA
DDR_ANY', 'INADDR_BROADCAST', 'INADDR_LOOPBACK', 'INADDR_MAX_LOCAL_GROUP', 'INAD
DR_NONE', 'INADDR_UNSPEC_GROUP', 'IPPORT_RESERVED', 'IPPORT_USERRESERVED', 'IPPR
OTO_GGP', 'IPPROTO_ICMP', 'IPPROTO_IDP', 'IPPROTO_IGMP', 'IPPROTO_IP', 'IPPROTO_
MAX', 'IPPROTO_ND', 'IPPROTO_PUP', 'IPPROTO_RAW', 'IPPROTO_TCP', 'IPPROTO_UDP',
'IP_ADD_MEMBERSHIP', 'IP_DEFAULT_MULTICAST_LOOP', 'IP_DEFAULT_MULTICAST_TTL', 'I
P_DROP_MEMBERSHIP', 'IP_MAX_MEMBERSHIPS', 'IP_MULTICAST_IF', 'IP_MULTICAST_LOOP'
, 'IP_MULTICAST_TTL', 'IP_OPTIONS', 'IP_TOS', 'IP_TTL', 'MSG_DONTROUTE', 'MSG_OO
B', 'MSG_PEEK', 'SOCK_DGRAM', 'SOCK_RAW', 'SOCK_RDM', 'SOCK_SEQPACKET', 'SOCK_ST
REAM', 'SOL_IP', 'SOL_SOCKET', 'SOL_TCP', 'SOL_UDP', 'SOMAXCONN', 'SO_ACCEPTCONN
', 'SO_BROADCAST', 'SO_DEBUG', 'SO_DONTROUTE', 'SO_ERROR', 'SO_KEEPALIVE', 'SO_L
INGER', 'SO_OOBINLINE', 'SO_RCVBUF', 'SO_RCVLOWAT', 'SO_RCVTIMEO', 'SO_REUSEADDR
', 'SO_SNDBUF', 'SO_SNDLOWAT', 'SO_SNDTIMEO', 'SO_TYPE', 'SO_USELOOPBACK', 'Sock
etType', 'TCP_NODELAY', '__builtins__', '__doc__', '__file__', '__name__', '_fil
eobject', '_realsocketcall', '_socketobject', 'error', 'errorTab', 'getfqdn', 'g
ethostbyaddr', 'gethostbyname', 'gethostbyname_ex', 'gethostname', 'getprotobyna
me', 'getservbyname', 'htonl', 'htons', 'inet_aton', 'inet_ntoa', 'ntohl', 'ntoh
s', 'socket']
<module 'socket' from 'C:\Python20\Lib\socket.pyo'>
dr
PYTHON SCRIPT ERROR:
Traceback (most recent call last):
File "interneIP.py", line 16, in ?
AttributeError: getaddrinfo
Inkl. Errormeldung.

Edit:
Augenscheinlich gibts diese Funktion nicht in Python 2.0.1.
Kann man sich eine Version zusammenstricken, indem man socket aus höherer Version in Python 2.0.1 rein kopiert ?
Quasi eine eigene Python 2.0.1 bastelt?
Oder gibts eine andere Lösung an die interne IP zu kommen?
BlackJack

Eine aktuellere Blender-Version kannst Du nicht installieren?
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Au weia, Du musst Dir mal das Projekt anschauen.
Da müsste ich jedes Objekt, also quasi alles neu machen, weil Blender > 2.25 nicht mehr die eigene Physik, sondern Bullet verwendet.
Das ist eine Arbeit seit 2003.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

dieter1a hat geschrieben:Kann man sich eine Version zusammenstricken, indem man socket aus höherer Version in Python 2.0.1 rein kopiert ?
Naja, das aktuelle Socket wird nicht gehen, weil es in C geschrieben ist und die API sich vermutlich geändert hat. Du könntest ctypes nutzen, aber das braucht auch eine aktuellere Python-Version. Alternativ könntest du einfach nur diese eine Funktion als C-Modul schreiben und versuchen sie zum laufen zu bekommen, aber dazu braucht man logischerweise C-Kenntnisse.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Da kommt mir eine Idee.
Kann man mit neuerem Python nicht eine Anwendung schreiben, die dann die jeweilige interne IP in eine txt schreibt?
Dort kann man sie ja bei Bedarf auslesen.
Außerdem müsste das ja auch mit Delphi gehen, das habe ich für das Einlogg-Programm verwendet. :idea:
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ja, man kann die IP auf stdout ausgeben lassen und dann von Python 2.0 einlesen lassen. Dann spart man sich auch temporäre Dateien.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Es geht einfacher als ich dachte!
In einer Test-Applikation konnte ich herausfinden, dass anstelle der internen IP einfach der Computername eingesetzt werden kann.
Damit funktioniert es genauso. Man braucht also nur socket.gethostname(), was ja in Python 2.0 enthalten ist.

MfG dieter1a
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Mit dem automatischen Herausfinden von sowohl IP-Adressen als auch Host-Namen kann man aber auf die Nase fliegen. Ein Host kann mehrere Aliase, Interfaces etc haben, und dann findet man nicht unbedingt das richtige. Ein Admin/Anwender sollte sowas konfigurieren koennen.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Der Netzwerkbetreiber konfiguriert ja die Computernamen, sodass sie nicht doppelt vorkommen.
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Ich kann mit Delphi die interne IP herauslesen.
Das ist mir aber zu gefährlich.
Auf der anderen Seite nutzt niemand die Interne, wenn sie nicht mit der Externen in zusammenhang gebracht wird.
Antworten