`
ShellyLi
  • 浏览: 112099 次
  • 性别: Icon_minigender_2
  • 来自: 山东
社区版块
存档分类
最新评论

用Perl语言进行Socket编程

    博客分类:
  • perl
阅读更多
网络编程是一门神秘且复杂的艺术,当然也十分有趣。Perl语言提供了丰富的TCP/IP网络函数,所有这些函数都
直接来源于C语言的socket库函数. 
由于Perl语言和C语言的socket库函数在型式和使用方法上都是一样的,因此会使用Perl语言进行Socket编程, 当
然也就会使用C语言进行Socket编程. 
下面是Perl语言中有关的socket库函数列表: 
函数原型 使用说明 
accept(NEWSOCKET,GENERICSOCKET) 接受请求的socket连接.如果成功,则返回压缩形式的网络地址;否则返回FALSE. 
范例: 
if (!$Connect = accept(NEW,HANDLE)) 

die "Connection failed: $! 
"; 

bind(SOCKET,NAME) 建立NAME与SOCKET的绑定,其中NAME应该是对应socket正确类型的压缩地址. 
如果成功,则返回真;否则返回假. 
在使用socket进行网络编程时,这一函数十分重要,因为它建立了socket句柄与网络上某个地址的关联. 
范例: 
bind(SH,$SocketAddress); 
connect(SOCKET,NAME) 试图与已经调用了accept()函数并等待建立连接的另外一个进程进行对话. 
如果成功,则返回真;否则返回假.NAME应该是对应SOCKET句柄正确类型的压缩地址 
范例: 
connect(SOCK,$address) || die "Can’t connect with remote host: $! 
"; 
gethostbyaddr(ADDRESS,TYPE) 将压缩形式的网络地址转换为更易于人阅读理解的名字与地址. 
当只知道主机的IP地址时,可以使用本函数查询主机名及其他网络信息.它返回一个列表,包含如下信息: 
($name, $alias, $addrtype, $length, $address) 
其中, $name是与IP地址对应的主机名, $alias是对应$name的其他别名, $addrtype是网络地址的类型, $length是
地址的长度, 而$address则是压缩形式IP地址的列表. 
范例: 
$PackedAddress = pack("C4", $IPAddr); 
($name, $alias, $addrtype, $length, $address) 
=gethostbyaddr($PackedAddress,2); 
gethostbyname(NAME) 与上面的gethostbyaddr()函数类似,不过在这里主机名是作为参数.返回的信息格式完全相同. 
范例: 
$Host = "stuff.com"; 
($name, $alias, $addrtype, $length, $address) 
=gethostbyname($Host); 
@IP = unpack("C4",$address[0]); 
$HostIP = join(".", @IP); 

验证邮箱密码的程序的原码 
下面的代码在两种操作系统下对263.net和pop.netease.com两个POP3服务器严格测试, 证明是成功的. 
第一种: 
操作系统:Windows 98 中文版 
WWW服务器:Apache 1.3.9 for Win 
Perl 解释器:ActiveState Tool Corp的Perl for Win32 , version 5.005_03 built for MSWin32-x86-object 
第二种: 
操作系统:Red Hat Linux 6.1 
WWW服务器:Apache 1.3.6 for Linux 
Perl 解释器:version 5.005_03 built for i386-linux 

#!/usr/bin/perl 
# test.pl 
#Author homepage: http://spot.126.com 
use strict; 
use Socket; 

my $pop3server = "263.net"; 
my $port = 110; 

$|=1; 
print "Content-type: text/html 

"; 
print "POP3 
"; 
print " 
"; 


my ($a,$name,$aliases,$proto,$type,$len,$thataddr,$thisaddr,$i); 
my $AF_INET = 2; 
my $SOCK_STREAM = 1; 
my $sockaddr = "S n a4 x8"; 

($name,$aliases,$proto) = getprotobyname("tcp"); 
($name,$aliases,$port) = getservbyname($port,"tcp") 
unless $port =~ /^d+$/;; 
($name,$aliases,$type,$len,$thataddr) = gethostbyname($pop3server); 

my $this = pack($sockaddr, $AF_INET, 12345, $thisaddr); 
my $that = pack($sockaddr, $AF_INET, $port, $thataddr); 

my $mysocket = socket(S, $AF_INET, $SOCK_STREAM, $proto); 
if ($mysocket) 


else 

print "不能打开socket: $!"; 
exit(0); 


my $mybind = bind(S, $this); 
if ($mybind) 


else 

print "无法绑定!: $!"; 
exit(0); 


my $myconnect = connect(S,$that); 
if ($myconnect) 


else 

print "连接错误: $!"; 
exit(0); 


my $BUF = ""; 
my $SenderIP = recv(S, $BUF, 596,0); 
if ($SenderIP) 


else 

print "接收错误: $!"; 
exit(0); 


if (substr($BUF,0,3) eq "+OK") 


else 

print "POP3服务器出错! 

"; 
exit(0); 


my $BUFFER = "USER zhangsan"; 
$BUFFER .= chr(13); 
$BUFFER .= chr(10); 

my $SENVAL = send(S, $BUFFER,0); 
if ($SENVAL) 


else 

print "发送错误: $!"; 
exit(0); 


my $BUF = ""; 
my $SenderIP = recv(S, $BUF, 4096,0); 
if ($SenderIP) 


else 

print "接收错误: $!"; 
exit(0); 


if (substr($BUF,0,3) eq "+OK") 


else 

print "无此帐号! 

"; 
exit(0); 


$BUFFER = "PASS 12345678"; 
$BUFFER .= chr(13); 
$BUFFER .= chr(10); 


my $SENVAL = send(S, $BUFFER,0); 
if ($SENVAL) 


else 

print "发送错误: $!"; 
exit(0); 


$BUF = ""; 
my $SenderIP = recv(S, $BUF, 196, 0); 
if ($SenderIP) 


else 

print "接收错误: $!"; 
exit(0); 


if (substr($BUF,0,3) eq "+OK") 


else 

print "密码错误!"; 
exit(0); 


print密码是正确的! 
本程序版权归菜瓜乐园 

EOF      
分享到:
评论

相关推荐

    Perl语言进行Socket编程

    用Perl语言进行Socket编程,Perl调用Socket API

    C语言socket编程

    网络编程是门神秘且复杂艺术当然也十分有趣Perl语言提供了丰富TCP/IP网络所有这些都... 由于Perl语言和C语言库在型式和使用思路方法上都是样因此会使用Perl语言进行Socket编程, 当然也就会 使用C语言进行Socket编程.

    Perl Socket 编程

    本章节我们为大家接收 Perl 语言中如何使用 Socket 服务。 创建服务端 使用 socket 函数来创建 socket服务。 使用 bind 函数绑定端口。 使用 listen 函数监听端口。 使用 accept 函数接收客户端请求。 创建客户端 ...

    unix平台下c语言高级编程指南

    9.4 Perl语言简介 9.5 一个简单的CGI例子 第三部分 X Window应用程序开发 第10章 X Window和Motif基础 10.1 简介 10.2 XWindow基本概念 10.3 启动Motif窗口管理器 10.4 设置Motif特性 10.5 Widget 第11章 ...

    socket.io-redis-emitter:Socket.IO Redis发射器,允许与另一个Node.js进程中的一组Socket.IO服务器进行通信

    发射器还提供其他编程语言版本: Java: : Python: : PHP: : Golang: : Perl: ://metacpan.org/pod/SocketIO :: 锈: : 它必须与socket.io-redis结合使用。 当前版本与以下两者兼容: socket.io-redis@...

    socket-io-redis-emitter:socket.io redis适配器

    发射器还提供其他编程语言版本: Java: : Python: : PHP: : Golang: : Perl: ://metacpan.org/pod/SocketIO :: 锈: : :bookmark_tabs: 表中的内容 :green_book: 建筑学 :person_running: 入门Gradle...

    基于嵌入式Linux Socket和Zigbee协议的无线煤矿监测系统上位机设计

    应用嵌入式Linux技术,采用套接字编程方法和Zigbee协议构建终端和主控端的网络通信渠道,提出了一种全新的无线监测系统上位机设计方案,并借助Perl语言对主控端进行数据分析和统计,最后综合利用单元测试和集成测试相...

    python3.6.0入门指南(官方版)

    虽然 Python 易于使用,但它却是一门完整的编程语言;与 Shell 脚本或批处理文件相比,它为编写大型程序提供了更多的结构和支 持。另一方面, Python 提供了比 C 更多的错误检查,并且作为一门 高级语言 ,它内置...

    HPROSE api文档

    它支持众多语言,例如 C++ ,.NET,Java,DelphiDelphiDelphi ,Objective-C, ActionScript ,JavaScript,ASP ,PHP,Python ,Ruby,Perl等语言,通过 Hprose可以在这些语言之间实现 方便且高效的互通。

    Python实现的检测web服务器健康状况的小程序

    对web服务器做健康检查,一般...说白了这些方式都是封装了curl库的,另外还有一些关于http的模块,例如perl的LWP,python的httplib,urllib或者urllib2 也可以去实现,今天就走的比较低级一些,就使用socket方式来进行

    x-scan-v3.3-cn

    其他例如perl、CGI脚本语言也可以编写扫描器,因此没有可执行文件的扫描器也许是运行在网络服务器上的,这种扫描器可以被植入到网络上的其它系统中,不需要使用者上网就能够24小时不停的进行大面积地址扫描,...

    中文版PHP使用手册

    34. 用 PHP 进行 HTTP 认证 35. cookies 36. 会话 37. 处理 XForms 38. 文件上传处理 39. 使用远程文件 40. 连接处理 41. 数据库永久连接 42. 安全模式 43. PHP 的命令行模式 VI. 函数参考 I. .NET 函数 II. ...

    水木清华站∶Java版精华区 含jsp及js等集合.chm

    [目录]Java语言教程 2. [目录]来自java的传说 3. [目录]咖啡备忘录 4. [目录]Java介绍 5. [目录]Java学习笔记(推荐) 6. [目录]JDBC文档 7. [目录]RMI 文档 2. [目录]Java资源...

    PHP函数参考手册大全

    34. 用 PHP 进行 HTTP 认证 35. cookies 36. 会话 37. 处理 XForms 38. 文件上传处理 39. 使用远程文件 40. 连接处理 41. 数据库永久连接 42. 安全模式 43. PHP 的命令行模式 VI. 函数参考 I. .NET 函数 II. ...

    经典收藏最全php5.0查询手册

    34. 用 PHP 进行 HTTP 认证 35. cookies 36. 会话 37. 处理 XForms 38. 文件上传处理 39. 使用远程文件 40. 连接处理 41. 数据库永久连接 42. 安全模式 43. PHP 的命令行模式 VI. 函数参考 I. .NET 函数 II. ...

    php手册PHP5研究室编无乱码版本chm

    34. 用 PHP 进行 HTTP 认证 35. cookies 36. 会话 37. 处理 XForms 38. 文件上传处理 39. 使用远程文件 40. 连接处理 41. 数据库永久连接 42. 安全模式 43. PHP 的命令行模式 VI. 函数参考 I. .NET 函数 ...

    PHP手册(带评论版-2008-03-14).part2.rar

    34. 用 PHP 进行 HTTP 认证 35. cookies 36. 会话 37. 处理 XForms 38. 文件上传处理 39. 使用远程文件 40. 连接处理 41. 数据库永久连接 42. 安全模式 43. PHP 的命令行模式 VI. 函数参考 I. .NET 函数 II. ...

    PHP手册(带评论版-2008-03-14).part1.rar

    34. 用 PHP 进行 HTTP 认证 35. cookies 36. 会话 37. 处理 XForms 38. 文件上传处理 39. 使用远程文件 40. 连接处理 41. 数据库永久连接 42. 安全模式 43. PHP 的命令行模式 VI. 函数参考 I. .NET 函数 II. ...

    PHP5 开发手册 简体中文手册

    34. 用 PHP 进行 HTTP 认证 35. Cookie 36. 会话 37. 处理 XForms 38. 文件上传处理 39. 使用远程文件 40. 连接处理 41. 数据库永久连接 42. 安全模式 43. PHP 的命令行模式 VI. 函数参考 I. .NET 函数 II. Apache ...

Global site tag (gtag.js) - Google Analytics