File: ftpport.pl

package info (click to toggle)
thp 0.4.6-9
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 260 kB
  • sloc: perl: 1,088; sh: 154; makefile: 56
file content (58 lines) | stat: -rw-r--r-- 1,143 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
sub ftpport {

use IO::Socket;
my $portspec = shift;
my @portspec = split (/\,/, $portspec);

$rhost = "$portspec[0].$portspec[1].$portspec[2].$portspec[3]";
$rport = (($portspec[4] << 8) + $portspec[5]);

if (inet_aton($rhost) ne inet_aton($saddr)) {
	return "port502";
} else {
	return "port200";
}
}

sub active {

use IO::Socket;

%actvhash = (
	dir150	=>	"150 Opening ASCII mode data connection for directory listing.\x0d\x0a",
	retr150	=>	"150 Opening BINARY mode data connection for $arg.\x0d\x0a",
	stor150	=>	"150 Opening BINARY mode data connection for $arg.\x0d\x0a"
);

my $actvcmd = shift;
my $arg = shift;

my $sock = IO::Socket::INET -> new(PeerAddr => "$rhost",
				PeerPort => "$rport",
				Proto	 => "tcp"
)
   or return "actv425";

if ($actvcmd =~ /stor/i) {
	print STDERR $actvhash{stor150};
} elsif ($actvcmd =~ /retr/i) {	
	print STDERR $actvhash{retr150};
}

my ($upload, $booty);
return unless (defined ($upload = fork()));
if ($upload) {
	while ($booty = <$sock>) {
		print LOG $booty;
		LOG->autoflush(1);
	}
	kill ('TERM', $upload);
} else {
	while (<STDIN>) {
		print $sock $_;
	}
}

close $sock;
return "compl";
}