zoukankan      html  css  js  c++  java
  • perl 协议,端口号,服务名之间的转换方法

    perl 协议,端口号,服务名之间的转换方法

    2011年12月04日 ⁄ Perl进阶暂无评论 ⁄ 被围观 352 次+

    之前我们已经看过了IP和主机名之间的转换,现在我们来看以下协议,端口号,服务名之间的转换方法。
    首先我们看几个函数的功能及使用:

    1. $number = getprotobyname($protocol)

    2. ($name,$aliases,$number) = getprotobyname($protocol)

    getprotobyname() 函数将指定的协议转换为对应的协议号,如果协议未知,则返回undef或空的列表

    1. $name = getprotobynumber($protocol_number)

    2. ($name,$aliases,$number) = getprotobyname($protocol_number)

    getprotobynumber() 函数将指定的协议号转换为对应的字符串类型的协议名称,如果协议名称未知,则返回undef或者是一个空的列表

    1. $port = getservbyname($service,$protocol)

    2. ($name,$aliases,$port,$protocol) = getservbyname($service,$protocol)

    getservbyname()函数将指定的协议和服务名转换为对应的端口号。这个函数在使用的时候需要指定两个参数,一个协议名称,另外一个就是服务名,应为同一个服务如果通过不同的协议传输,对应的端口号是不同的。如果服务名未知,则返回一个空的列表。

    1. $name = getservbyport($port,$protocol)

    2. ($name,$aliases,$port,$protocol) = getservbyport($port,$protocol)

    函数getservbyport() 刚好是函数getservbyname()的逆向操作,将对应的端口号和协议名转换为对应的服务名。
    下面我们通过一个程序来了解以下这几个函数的使用:

    1. #! /usr/bin/perl

    2. use strict;

    3. use warnings;

    4. use Socket;

    5. use constant DEFAULT_ADDR => '127.0.0.1';

    6. my $packed_addr = gethostbyname(shift || DEFAULT_ADDR) or die "can't look up host:$!";

    7. my $protocol = getprotobyname('tcp');

    8. my $port = getservbyname('daytime','tcp') or die "can't look up port:$!";

    9. my $destination = sockaddr_in($port,$packed_addr);

    10. socket(SOCK,PF_INET,SOCK_STREAM,$protocol) or die "can't make socket:$!";

    11. connect(SOCK,$destination) or die "can't connect:$!";

    12. print <SOCKET>;

  • 相关阅读:
    二、云计算openstack共享组件--时间同步服务ntp
    一、云计算openstack介绍
    五、Kvm虚拟机迁移
    四、Kvm虚拟化网络管理
    三、Kvm虚拟化存储管理
    二、kvm虚拟机管理
    一、kvm虚拟化介绍
    九、Linux网络技术管理及进程管理
    园主的码云网站,可以在里面查看园主的练习代码哦
    万能Makefile,前戏做足项目做起来才顺畅。
  • 原文地址:https://www.cnblogs.com/cute/p/2526016.html
Copyright © 2011-2022 走看看