免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1469 | 回复: 7
打印 上一主题 下一主题

发起 telnet 链接的时候,如何绑定 device?(已解决) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-06-17 14:18 |只看该作者 |倒序浏览
本帖最后由 ChiyuT 于 2013-06-20 09:09 编辑

cpan上有一个 Net::Telnet 模块,发起链接的时候,可以绑定源ip,比如:

  1. my $obj= new Net::Telnet( Host => "10.1.1.1", Localhost => "10.1.1.11", Localfamily => "ipv4", Timeout => 30);
复制代码
但是现在情况特殊,绑定ip的办法失效。只能通过绑定 device 的方式才能正常运行,比如 eth1。请问有没有什么容易点儿的办法可以实现?或者有别的好使的模块也行。

比如 ping 的时候,可以通过 -I 指定 device:
  1. ping -I eth1 10.1.1.1
复制代码
谢谢。

论坛徽章:
0
2 [报告]
发表于 2013-06-17 16:21 |只看该作者
除非你重写这个模块.
MS绑定interface这个要求是不能跨平台的.

论坛徽章:
0
3 [报告]
发表于 2013-06-18 15:06 |只看该作者
laputa1973 发表于 2013-06-17 16:21
除非你重写这个模块.
MS绑定interface这个要求是不能跨平台的.


你说得很对,得自己添加这个功能。大概 10 行代码搞定。

论坛徽章:
0
4 [报告]
发表于 2013-06-18 18:25 |只看该作者
我只弄过linux下的,不知道其他平台怎么实现
LZ可以分享下

论坛徽章:
0
5 [报告]
发表于 2013-06-20 08:52 |只看该作者
laputa1973 发表于 2013-06-18 18:25
我只弄过linux下的,不知道其他平台怎么实现
LZ可以分享下


在 Telnet 模块的 new 和  open 函数中,增加一个 $device  变量。

在 new 中,仿造 localhost 的形式对 $device 进行初始化。
  1. sub device {
  2.     my ($self, $device) = @_;
  3.     my (
  4.     $prev,
  5.     $s,  
  6.     );   

  7.     $s = *$self->{net_telnet};
  8.     $prev = $s->{device};

  9.     if (@_ >= 2) {
  10.     unless (defined $device) {
  11.         $device = "";
  12.     }   

  13.     $s->{device} = $device;
  14.     }   

  15.     $prev;
  16. }
复制代码
在 open 中,使用 setsockopt 函数进行设备绑定。
  1. setsockopt $self, SOL_SOCKET, SO_BINDTODEVICE(), pack("Z*", $device) ;
复制代码
使用方法:
  1. my $obj = new Net::Telnet( Host => "10.1.1.1", device => 'eth1', Localfamily => "ipv4", Prompt => "/#/");
复制代码

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
6 [报告]
发表于 2013-06-20 09:20 |只看该作者
本帖最后由 laputa73 于 2013-06-20 09:21 编辑

setsockopt $self, SOL_SOCKET, SO_BINDTODEVICE(), pack("Z*", $device) ;

这个方法MS是linux专有的。

论坛徽章:
0
7 [报告]
发表于 2013-06-20 09:28 |只看该作者
laputa73 发表于 2013-06-20 09:20
setsockopt $self, SOL_SOCKET, SO_BINDTODEVICE(), pack("Z*", $device) ;

这个方法MS是linux专有的。
...


MS 下的东东我就不大懂了。但是 linux 下确保有效。

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
8 [报告]
发表于 2013-06-20 09:34 |只看该作者
回复 7# ChiyuT
不是说windows,
我是说其他unix平台好像(貌似)也是不行的


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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP