LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2385|回复: 2

perl获取router上的公网IP,以及更新DNS中的A记录

[复制链接]
发表于 2005-7-15 23:05:25 | 显示全部楼层 |阅读模式
代码目的如下:
公司有一router与另一公司有专线连接,其IP为10.10.10.10,备注其IP域名地址我故意有更改,以下也一样
同时也负责了ADSL-MODEM后router功能.故其上会有一个公网的IP地址.不過此地址不是固定的,我们用如下perl程式获得其公
网的IP地址,这样可以去做一个mail server..其它的以后再谈.

cat /root/check_real_ip.pl


  1. #! /usr/bin/perl -w

  2. use Net::Telnet ();
  3. $t = new Net::Telnet (Timeout => 10,   
  4.         Prompt => '/ns5gt\-\> $/');                          
  5. $t->open("10.10.10.10");
  6. $t->login('Riverstar', 'linuxsir');
  7. @lines = $t->cmd("get interface");
  8. for($i = 0;$i < @lines;$i++)
  9. {
  10. if($lines[$i] =~ /^untrust/)
  11. {
  12.   @fd = split(/\s+/,$lines[$i]);
  13.   last;
  14. }
  15. }

  16. $fd[1] =~ s/\/\d+$//;
  17. print STDERR "my ip: " . $fd[1] . "\n";

  18. open OUT,"| /usr/bin/nsupdate";
  19. print OUT <<OUT_NSUPDATE;
  20. server 192.168.2.253
  21. local 192.168.5.112
  22. update delete mail.server.com.
  23. update add mail.server.com. 610 A ${fd[1]}
  24. send
  25. quit
  26. OUT_NSUPDATE
  27. close OUT;

  28. exit 0;


复制代码


以下是我telnet登录操作过程.
[root@shlinux root]# telnet 10.10.10.10
Trying 10.10.10.10...
Connected to 10.10.10.10 (10.10.10.10).
Escape character is '^]'.
Remote Management Console
login: Riverstar
password:linuxsir
ns5gt->
ns5gt-> ?
clear                clear dynamic system info
delete               delete persistent info in flash
exec                 exec system commands
exit                 exit command console
get                  get system information
ping                 ping other host
reset                reset system
save                 save command
set                  configure system parameters
trace-route          trace route
unset                unconfigure system parameters
ns5gt-> get interface

A - Active, I - Inactive, U - Up, D - Down, R - Ready

Interfaces in vsys Root:
Name           IP Address         Zone        MAC            VLAN State VSD     
trust          10.10.10.10/24   Trust       0010.db01.9272    -   U   -
untrust        222.79.2.89/32    Untrust     0010.db01.9271    -   U   -
serial         0.0.0.0/0          Null        0010.db01.9276    -   D   -
vlan1          0.0.0.0/0          VLAN        0010.db01.927f    1   D   -

备注:其中的第二行为公司的外网IP地址
ns5gt->exit

ns5gt-> exitConnection closed by foreign host.

crontab -e
*/5 * * * * /root/check_real_ip.pl

这样每五分钟我分收到一封来自Cron Daemon的信可以检测到是否IP变了吗?也可以在DNS中设置mail的A记录.
my ip: 222.79.2.89
> > > > > >

其中192.168.5.112为内部的dns只是forwards到192.168.2.253上而已
192.168.2.253有server.com域的使用权以及固定的IP地址
DNS是由也是运行perl的mail server
发表于 2005-7-18 13:11:30 | 显示全部楼层
勉强看懂. 比较COOL.
回复 支持 反对

使用道具 举报

发表于 2005-7-18 19:01:21 | 显示全部楼层
ruby:::
[PHP]
require 'net/telnet'
gw = Net::Telnet.new("Host"=>"10.10.10.10","Timeout" => 10, "rompt" =>/ns5gt\-\> $/)
gw.login("name", "password")
gw.cmd("get interface") do |recvdata|
result = recvdata.split
result.grep(/^untrust/)
print result
end
[/PHP]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表