Linux / Windows可以从路由器获取DNS地址
我需要编写一个本地dns代理,如何获取操作系统的DNS服务器地址,是否有任何Perl或Python模块可以执行此操作?
更新
问题应该是清楚的,我需要一些东西来模拟接口启动和协议与本地路由器通信,我不能在接口启动之前接受tcpdump。不确定互联网上是否有样本跟踪文件。可能它不是我不熟悉的IP协议。
UPDATE2
当我使用本地DNS代理服务器时,TCP配置就像显示在图片中
如果我查询Net :: DNS :: Resolver,我得到结果:127.0.0.1这不是我需要的
答案 0 :(得分:3)
非常长,格式化的评论支持Steffen的回答。
TLDR :Steffen正确(+1 BTW)。 Net :: DNS :: Resolver可以为您提供所需的信息。
#!perl
use strict;
use warnings;
use Net::DNS::Resolver;
#configure a resolver object using your OS's current config.
my $resolver = Net::DNS::Resolver->new;
print join "\n", $resolver->nameservers;
在Windows和Windows上测试过OS X。
如果您对自己的绳索感到沮丧,那么您所要求的协议就是DHCP(动态主机配置协议)。
像操作系统一样使用DHCP,不仅仅是"查询"对于DNS服务器,但请求IP地址的(新的/续订的)租约。像Gateway,Time Servers&包含DNS服务器也很重要,但次要。如果操作不正确,您可能会搞砸操作系统与DHCP服务器之间的关系,或者说服您的DHCP服务器您的程序是网络上应该维护租用信息的另一台(假)机器。
答案 1 :(得分:2)
gethostbyname使用底层OS库的解析程序功能。如果您希望更直接地访问DNS数据包,请使用Net::DNS::Resolver。
答案 2 :(得分:0)
在使用脚本
之前,您需要找到IP / Mac / GW地址#!/usr/bin/perl
use strict;
use warnings;
use IO::Socket::INET;
use Net::DHCP::Packet;
use Net::DHCP::Constants;
srand();
# creat DHCP Packet
my $discover = Net::DHCP::Packet->new(
Xid => int(rand(0xFFFFFFFF)), # random xid
Flags => 0x0000,
DHO_DHCP_MESSAGE_TYPE() => DHCPREQUEST(),
);
$discover->ciaddr('192.168.1.5');
$discover->chaddr('5cc5d43ca078');
my $handle = IO::Socket::INET->new(
Proto => 'udp',
ReuseAddr => 1,
PeerPort => '67',
LocalPort => '68',
PeerAddr => '192.168.1.1'
) or die "socket: $@";
$handle->send($discover->serialize());
my $newmsg;
if ($handle->recv($newmsg, 1024)) {
my $packet = Net::DHCP::Packet->new($newmsg);
print STDERR $packet->toString();
}
执行结果:
op = BOOTREPLY
htype = HTYPE_ETHER
hlen = 6
hops = 0
xid = eaba416c
secs = 0
flags = 0
ciaddr = 192.168.1.5
yiaddr = 192.168.1.5
siaddr = 0.0.0.0
giaddr = 0.0.0.0
chaddr = 5cc5d43ca078
sname =
file =
Options :
DHO_DHCP_MESSAGE_TYPE(53) = DHCPACK
DHO_SUBNET_MASK(1) = 255.255.255.0
DHO_ROUTERS(3) = 192.168.1.1
DHO_DOMAIN_NAME_SERVERS(6) = 192.168.1.1
DHO_DHCP_SERVER_IDENTIFIER(54) = 192.168.1.1
DHO_DHCP_LEASE_TIME(51) = 86400
DHO_VI_VENDOR_SPECIFIC_INFOMATION(125) = \x00\x00\x00\x00\x14\x02\x06HGW-CT\x0A\x02\x00\x00\x0B\x02\x00U\x0D\x02\x00.
padding [247] = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
我们可以看到
DHO_DOMAIN_NAME_SERVERS(6) = 192.168.1.1
是DNS服务器地址