晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /usr/share/doc/perl-Net-SSLeay/examples/ |
Upload File : |
#!/usr/bin/perl -w
# sslecho.pl - Echo server using SSL
#
# Copyright (c) 1996,1998 Sampo Kellomaki <sampo@iki.fi>, All Rights Reserved.
# Date: 27.6.1996, 8.6.1998
# 7.12.2001, added more support for client side certificate testing --Sampo
# $Id: sslecho.pl,v 1.2 2001/12/08 17:43:14 sampo Exp $
#
# Usage: ./sslecho.pl *port* *cert.pem* *key.pem*
#
# This server always binds to localhost as this is all that is needed
# for tests.
die "Usage: ./sslecho.pl *port* *cert.pem* *key.pem*\n" unless $#ARGV == 2;
($port, $cert_pem, $key_pem) = @ARGV;
$our_ip = "\x7F\0\0\x01";
$trace = 2;
use Socket;
use Net::SSLeay qw(sslcat die_now die_if_ssl_error);
$Net::SSLeay::trace = 3; # Super verbose debugging
#
# Create the socket and open a connection
#
$our_serv_params = pack ('S n a4 x8', &AF_INET, $port, $our_ip);
socket (S, &AF_INET, &SOCK_STREAM, 0) or die "socket: $!";
bind (S, $our_serv_params) or die "bind: $! (port=$port)";
listen (S, 5) or die "listen: $!";
#
# Prepare SSLeay
#
Net::SSLeay::load_error_strings();
Net::SSLeay::ERR_load_crypto_strings();
Net::SSLeay::SSLeay_add_ssl_algorithms();
Net::SSLeay::randomize();
print "sslecho: Creating SSL context...\n" if $trace>1;
$ctx = Net::SSLeay::CTX_new () or die_now("CTX_new ($ctx): $!\n");
print "sslecho: Setting cert and RSA key...\n" if $trace>1;
Net::SSLeay::CTX_set_cipher_list($ctx,'ALL');
Net::SSLeay::set_cert_and_key($ctx, $cert_pem, $key_pem) or die "key";
while (1) {
print "sslecho $$: Accepting connections...\n" if $trace>1;
($addr = accept (NS, S)) or die "accept: $!";
$old_out = select (NS); $| = 1; select ($old_out); # Piping hot!
if ($trace) {
($af,$client_port,$client_ip) = unpack('S n a4 x8',$addr);
@inetaddr = unpack('C4',$client_ip);
print "$af connection from " . join ('.', @inetaddr)
. ":$client_port\n" if $trace;;
}
#
# Do SSL negotiation stuff
#
print "sslecho: Creating SSL session (cxt=`$ctx')...\n" if $trace>1;
$ssl = Net::SSLeay::new($ctx) or die_now("ssl new ($ssl): $!");
print "sslecho: Setting fd (ctx $ctx, con $ssl)...\n" if $trace>1;
Net::SSLeay::set_fd($ssl, fileno(NS));
print "sslecho: Entering SSL negotiation phase...\n" if $trace>1;
Net::SSLeay::accept($ssl);
die_if_ssl_error("ssl_echo: ssl accept: ($!)");
print "sslecho: Cipher `" . Net::SSLeay::get_cipher($ssl)
. "'\n" if $trace;
#
# Connected. Exchange some data.
#
$got = Net::SSLeay::ssl_read_all($ssl) or die "$$: ssl read failed";
print "sslecho $$: got " . length($got) . " bytes\n" if $trace==2;
print "sslecho: Got `$got' (" . length ($got) . " chars)\n" if $trace>2;
$got = uc $got;
if ($got eq 'CLIENT-CERT-TEST') {
$got .= Net::SSLeay::dump_peer_certificate($ssl) . "END CERT\n";
}
Net::SSLeay::ssl_write_all($ssl, $got) or die "$$: ssl write failed";
$got = ''; # in case it was huge
print "sslecho: Tearing down the connection.\n\n" if $trace>1;
Net::SSLeay::free ($ssl);
close NS;
}
Net::SSLeay::CTX_free ($ctx);
close S;
__END__