Python 在企业环境中查询/接收设备主机名、IP地址和用户名的最佳方法

Python 在企业环境中查询/接收设备主机名、IP地址和用户名的最佳方法,python,security,active-directory,network-programming,Python,Security,Active Directory,Network Programming,我是一名安全分析师,也是一名Python新手,在工作中的事件调查过程中,我经常需要找到有关最终用户的以下3条信息: 1.他们的设备主机名 2.与设备关联的IP地址 3.他们的登录用户名 我甚至不知道如何开始创建一个脚本来提供这些信息,但我想它会提示我输入上面提到的3条信息中的1条,然后打印出另外2条。除了下面的提示部分,我被卡住了 #!/usr/bin/python print "Please paste in one of the following pieces of informatio

我是一名安全分析师,也是一名Python新手,在工作中的事件调查过程中,我经常需要找到有关最终用户的以下3条信息:

1.他们的设备主机名
2.与设备关联的IP地址
3.他们的登录用户名

我甚至不知道如何开始创建一个脚本来提供这些信息,但我想它会提示我输入上面提到的3条信息中的1条,然后打印出另外2条。除了下面的提示部分,我被卡住了

#!/usr/bin/python

print "Please paste in one of the following pieces of information.."

print "\n"

print "1. Device hostname"
print "2. IP address"
print "3. Username"

print "\n"

str = raw_input()

我看过一些帖子,详细介绍了如何在本地而不是远程的系统上获取各种信息。有人知道我将如何用Python构建这种类型的脚本吗

您可以使用现有的命令行工具,如:
dig
host
命令和
nslookup
,这些工具都将对主机名和IP地址进行DNS查找。请求“用户名”似乎没有意义。多个用户可以登录到一台机器,因此我不确定您打算如何收集这段信息,除非您允许多个返回值

这里还有一个Perl one liner,它将执行IP到名称解析(反向DNS查找):

该脚本假定命令行上有一个参数

下面是一个在正向DNS方向执行相同操作的脚本,打印所有IP:

perl -e 'use Socket qw(getaddrinfo getnameinfo NI_NUMERICSERV NI_NUMERICHOST); my ($err, @res) = getaddrinfo($ARGV[0], "www", {socktype => SOCK_STREAM}); for my $r (@res) { my ($err, $ip) = getnameinfo($r->{addr}, NI_NUMERICHOST | NI_NUMERICSERV); print "$ip\n";}'
它还假定一个命令行参数

如果您想要Python解决方案,这将帮助您开始使用该库:


这只是一个正向解析,但是您应该能够基于Perl代码对其进行修改,以获得一个工作的反向解析。您也可以使用内置的,但是如果您计划在大量机器上使用内置的,我建议您使用
gevent
库。

您是专门使用Python还是其他非Python解决方案来实现这一点的?我想用Python来实现,但我也愿意尝试其他语言
perl -e 'use Socket qw(getaddrinfo getnameinfo NI_NUMERICSERV NI_NUMERICHOST); my ($err, @res) = getaddrinfo($ARGV[0], "www", {socktype => SOCK_STREAM}); for my $r (@res) { my ($err, $ip) = getnameinfo($r->{addr}, NI_NUMERICHOST | NI_NUMERICSERV); print "$ip\n";}'
import gevent.resolver_ares
from gevent.socket import AF_INET, SOCK_STREAM

def resolve(fqdn):
    resolver = gevent.resolver_ares.Resolver()
    results = resolver.getaddrinfo(
        fqdn, 0, family=AF_INET, socktype=SOCK_STREAM)
    return results[0][-1][0]