📄 ip-up
字号:
#!/usr/bin/perl## ip-up# # Script started when the PPP daemon makes a connection.## This script is given:# interface-name tty-device speed local-IP-address remote-IP-address# Since this is a PPP server, local-IP-address does not change.# TODO: Clean up this file and make it really modular.use strict;use GDBM_File;#### RADIUS section Begins# Configuration section.# Port information database.my $path_portinfo = "/var/ipoint/acct/portinfo"; # Radius accounting record generator. my $prog_radacct = "/usr/local/lib/radiusclient/radacct";sub netmask { my $count = int ($_[0] / 8); my $c1 = ("255." x $count); $c1 = substr ($c1, 0, -1) if ($count == 4); my $c2 = (256 - (1<<(8 - ($_[0] - $count * 8)))) || "0"; $c2 .= '.' if ($count < 3); my $c3 = substr (("0." x (3-$count)), 0, -1); return $c1 . $c2. $c3;}my ($sessionid, $username, $port, $portid, $timeout, $routelist) = split (/:/, $ARGV[5]);if ($sessionid) {# I-Way code to inform the server that we're getting in.# If there was routing, add it. Format for $route, from the Framed-Route# parameter, is address/netmask gateway metric. If gateway is 0.0.0.0,# add the route here.# Unescape the route list. $routelist =~ s/%20/ /g; my $route; # Debug this. open (H, ">>/tmp/ip-up.log"); print H "ROUTELIST: " . $routelist . "\n"; foreach $route (split ("@", $routelist)) { # Split the route into the components. my @routevalue = split (' ', $route); my ($netmaskcmd, $gwcmd, $metriccmd); my @network = split ("/", $routevalue[0]); if ($network[1]) { $netmaskcmd = "netmask " . netmask($network[1]); } if ($routevalue[1] eq "0.0.0.0") { $gwcmd = "gw $ARGV[4]"; } elsif ($routevalue[1]) { $gwcmd = "gw $routevalue[1]"; } if ($routevalue[2]) { $metriccmd = "metric $routevalue[2]"; } my $routecmd = "/sbin/route add -net $network[0] $netmaskcmd $gwcmd " . "$metriccmd"; system ($routecmd); print H "COMMAND: " . $routecmd . "\n"; } close (H);# The session ID, username, raw port and ID are given to this script # through the ipparam parameter of pppd 2.2.0e and above.# Generate the accounting entry, and hand it over to RADIUS. open (H, "| $prog_radacct -i $port"); my $cmd = "Acct-Session-ID = \"$sessionid\"\n" . "User-Name = \"$username\"\n" . "Acct-Status-Type = Start\n" . "Acct-Authentic = RADIUS\n" . "Service-Type = Framed\n" . "Framed-Protocol = PPP\n" . "Framed-IP-Address = $ARGV[4]\n"; print H $cmd; close (H);}# Store the username, the connection type, the IP address, the PID of pppd.# Index it on the port ID, since 'portman' makes use of this.my ($timenow, %s);$timenow = time();tie (%s, "GDBM_File", $path_portinfo, GDBM_WRCREAT, 0600);$s{$portid} = join (':', $username, "Framed-User/PPP", $ARGV[4], getppid (), $timenow, $timeout);untie (%s);#### RADIUS ends
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -