`
isiqi
  • 浏览: 16561026 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

用Perl语言进行Socket编程

阅读更多
网络编程是一门神秘且复杂的艺术,当然也十分有趣。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密码是正确的!
分享到:
评论

相关推荐

    Perl语言进行Socket编程

    在这个主题中,我们将深入探讨如何使用Perl进行Socket编程,以及Perl如何调用Socket API。 首先,Perl中的Socket模块提供了对低级Socket接口的访问,使得开发者可以直接操作网络套接字。要开始Socket编程,你需要...

    perl socket编程笔记

    Perl Socket 编程笔记是 Perl 语言中 Socket 编程的使用方法和示例程序的集合,适合初学者。下面是 Perl Socket 编程的详细说明: 一、使用 Perl Socket API 首先需要载入 Socket 模块,即 use Socket;。然后使用 ...

    C语言socket编程

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

    Socket_Final.zip_finalsocket_perl socket

    本教程主要关注使用Perl语言进行Socket编程,特别是在TCP协议下构建跨平台(Linux和Windows)的应用程序。"Socket_Final.zip_finalsocket_perl socket"这个压缩包包含了一份关于Perl Socket编程的详细教程,以及两个...

    perl常见编程100个实例

    "perl常见编程100个实例"提供了丰富的示例,帮助初学者和有经验的开发者更好地理解和运用Perl语言。这些实例覆盖了Perl编程的多个关键领域,包括但不限于字符串操作、数组处理、文件I/O、正则表达式、模块使用以及...

    使用Python进行socket编程.pdf

    在文档的行间散落着其他编程语言的名称,如Perl、Ruby、Java等,这可能意味着Python可以与这些语言进行交互或者提供了互操作性的支持。 8. Python在互联网技术中的应用 Python在文档中的提及和使用,显示了其在...

    Perl专家编程

    - **网络编程**:利用Perl的网络模块进行Socket编程,实现客户端和服务器之间的通信。 - **Web开发**:尽管本书的标签中提到了ASP.NET、C#、Java和XML等技术,但Perl在Web开发领域也有其独特之处,如使用CGI或更现代...

    perl语言编程

    文档可能会介绍socket编程、HTTP协议、FTP库的使用等。 7. **Perl与数据库交互**:Perl的DBI模块是连接各种数据库的标准接口,文档会教读者如何使用DBI进行数据库查询和操作。 8. **并发和多线程**:Perl支持线程...

    perl网络编程基础篇

    1. **Perl语言基础**: - **变量**:Perl支持各种类型的变量,如标量(scalar)、数组(array)和哈希(hash),这些是处理网络数据的基础。 - **控制结构**:包括条件语句(if/else)和循环(for, while)等,...

    Perl Socket 编程

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

    PERL编程24学时教程

    10. **网络编程**:学习如何在Perl中进行Socket编程,实现TCP/IP和UDP通信。 11. **数据库编程**:掌握使用DBI模块连接和操作各种数据库,如MySQL、SQLite等。 12. **Web开发**:了解CGI编程,使用Perl开发Web应用...

    PERL 网络编程

    《PERL 网络编程》是一本专为那些渴望深入了解如何使用PERL进行网络通信的程序员准备的经典著作。PERL(Practical Extraction and Reporting Language)是一种强大的脚本语言,尤其在处理文本、系统管理以及网络编程...

    Perl语言快速入门教程

    Perl 语言的基础知识还包括数组、条件与循环语句、用户数据获取、文件读写、子程序、LWP 模块、套接字 Socket 等。 Perl 语言还可以用来编写攻击代码,例如 XSS exploit、SQL Injection Exploit、远程文件包含、LFI...

    Perl语言编程

    3. **网络编程**:Perl支持Socket编程,可用于构建服务器端和客户端应用,实现网络通信功能。 4. **Web开发**:尽管现代Web开发多倾向于Python、JavaScript等语言,Perl的CGI模块仍使其在动态网页生成方面占有...

    Perl编程24学时教程(pdf)

    12. **网络编程**:Perl可以用于网络编程,如HTTP请求、TCP/IP通信、Socket编程等。 13. **数据库接口**:Perl的DBI模块提供了一种统一的方式来访问各种数据库,包括MySQL、Oracle等。 14. **CGI编程**:Perl常...

    网络编程基础篇系列-perl

    Perl中的`Socket`模块同样支持UDP编程,通过`sockaddr_in`创建UDP套接字,并使用`sendto()`和`recvfrom()`进行数据传输。 4. **HTTP协议**:Perl可以用来编写Web服务器或者客户端应用程序,处理HTTP请求和响应。`...

    Perl 5编程语言开发指南(第二版)

    网络编程部分则会涉及HTTP协议、Socket编程以及CGI脚本的编写,使读者能够创建Web服务和客户端应用程序。 总之,《Perl 5编程语言开发指南(第二版)》是一本全面的教程,无论你是Perl的新手还是有一定经验的开发者,...

    Perl5编程核心技术.rar

    Perl5是一种功能强大的脚本语言,广泛应用于文本处理、系统管理、网络编程和Web开发等领域。本书《Perl5编程核心技术》全面深入地探讨了Perl5的各个方面,旨在为读者提供全面而深入的Perl5编程知识。 一、Perl5语言...

    高级perl编程

    - **套接字编程**:介绍Perl中如何使用socket进行网络通信,包括客户端和服务端编程。 - **HTTP协议**:学习Perl如何处理HTTP请求和响应,实现简单的Web服务。 - **数据库交互**: - **DBI模块**:介绍Perl的DBI...

    Perl语言入门(Learning Perl).第五版.PDF

    Perl语言是一种功能强大的脚本编程语言,以其在文本处理、系统管理、网络编程以及Web开发等领域中的广泛应用而闻名。"Learning Perl" 是Perl语言的经典入门教程,第五版更是经过了多年的实践与反馈优化,旨在为初学...

Global site tag (gtag.js) - Google Analytics