Hallo,
gibt es eine Möglichkeit, über den Benutzernamen die IP-Adresse eines Users im Netzwerk zu ermitteln (natürlich nur, wenn der User auch angemeldet ist)? Ich habe mir schon win32net und wmi angeschaut, aber nichts gefunden.
Kann aber auch sein, das liegt an meiner mangelnden Kenntniss über Netzwerke.
Grüße
Mawilo
IP Adresse ermitteln
- Mawilo
- User
- Beiträge: 452
- Registriert: Sonntag 22. Februar 2004, 10:58
- Wohnort: Sachsen
- Kontaktdaten:
Irgendwo muss es einen Zusammenhang geben. Früher konnte ich an einen Benutzernamen ein Popup schicken. Da musste der Benutzername doch auch aufgelöst werden.
Heute sind wir mit Vista "gesegnet" und da gibt es nur einen Dienst "msg". Das funktioniert aber nicht, wenn ich nur den Benutzernamen habe.
Heute sind wir mit Vista "gesegnet" und da gibt es nur einen Dienst "msg". Das funktioniert aber nicht, wenn ich nur den Benutzernamen habe.
- mkesper
- User
- Beiträge: 919
- Registriert: Montag 20. November 2006, 15:48
- Wohnort: formerly known as mkallas
- Kontaktdaten:
OK, es handelt sich um ein Windows-Umfeld. Dann hat ja jeder User ein Homeverzeichnis. Wenn du rausfindest, auf welchem Server ein User sein Home hat, kannst du etwas in der Art machen:
Das Modul active_directory finde ich einfach genial.
Falls Distributed File System (DFS) eingesetzt wird, kann man auf diese Weise leider nicht den Homepfad ermitteln. Ich behelfe mir damit, dass ich mir die Daten geben lasse, wie die Homes im System angelegt werden und werte diese aus.
Code: Alles auswählen
import sys
import active_directory as ad
import win32net
import pywintypes
def main(user_name):
user = ad.find_user(user_name)
computer_name = user.homeDirectory
info_level = 1 # Level 2 just displays some unnecessary info about client OS.
client_name = ""
user_name = str(user.sAMAccountName)
try:
sessions = \
win32net.NetSessionEnum(
info_level,
computer_name,
client_name,
user_name
)
except pywintypes.error, ext_error:
if ext_error[0] == 2221:
print "Es bestehen keine offenen Verbindungen."
else:
raise
else:
for session in sessions:
# client_name returns hostname or IPv4!
print session['client_name']
print session['num_opens']
# etc.
if __name__ == '__main__':
main(sys.argv[-1])
except pywintypes.error, ext_error:
if ext_error[0] == 2221:
print "Es bestehen keine offenen Verbindungen."
else:
raise
else:
for session in sessions:
print session['client_name']
print session['num_opens']
Falls Distributed File System (DFS) eingesetzt wird, kann man auf diese Weise leider nicht den Homepfad ermitteln. Ich behelfe mir damit, dass ich mir die Daten geben lasse, wie die Homes im System angelegt werden und werte diese aus.
Warum nichtmkesper hat geschrieben:Code: Alles auswählen
sessions = \ win32net.NetSessionEnum( info_level, computer_name, client_name, user_name )
Code: Alles auswählen
sessions = win32net.NetSessionEnum(
...
)
- Mawilo
- User
- Beiträge: 452
- Registriert: Sonntag 22. Februar 2004, 10:58
- Wohnort: Sachsen
- Kontaktdaten:
Da ich den Server nicht kenne, auf dem der User angemeldet ist, kann ich win32net.NetSessionEnum nicht verwenden. Außerdem benötigt man dafür auch Admin-Rechte. Jedenfalls bekomme ich eine Meldung "Zugriff verweigert", wenn ich als normaler User auf meinen eigenen Rechner zugreife.
Gibt es irgendeine Möglichkeit, über WINS den Namen aufzulösen?
Gibt es irgendeine Möglichkeit, über WINS den Namen aufzulösen?
- mkesper
- User
- Beiträge: 919
- Registriert: Montag 20. November 2006, 15:48
- Wohnort: formerly known as mkallas
- Kontaktdaten:
Sorry, war alter Code, den ich nur minimal angepasst hatte. Die ganze Stelle könnte man eleganter formulieren.derdon hat geschrieben:Warum nichtCode: Alles auswählen
sessions = win32net.NetSessionEnum( ... )
@Mawilo: Ohne Admin-Rechte wirst du hier meiner Vermutung nach nichts reißen können. Den Server, auf dem das Home des Users liegt, bekommst du ja aus dem ADS.
- Mawilo
- User
- Beiträge: 452
- Registriert: Sonntag 22. Februar 2004, 10:58
- Wohnort: Sachsen
- Kontaktdaten:
Ich habe hier einen anderen Ansatz gefunden. Nach der kurzen Beschreibung sollte das Programm genau das machen, was ich suche. Allerdings kann ich mit der Ausgabe nichts anfangen. Entweder bekomme ich einen Fehler oder meinen eigenen Hostnamen.
Hat jemand noch ne Idee?
Hat jemand noch ne Idee?