📄 config_card.pl
字号:
#!/usr/bin/perl -wuse strict;use Getopt::Long;sub usage() { print STDERR "usage: --dev {e. g. ath0} --ssid --gateway --ap ( act as an access point. off by default)"; exit 1;}sub mac_addr_from_dev($) { my $device = $_[0]; my $output = `/sbin/ifconfig $device 2>&1`; if ($output =~ /^$device: error/) { return ""; } my @tmp = split(/\s+/, $output); my $mac = $tmp[4]; $mac =~ s/-/:/g; my @hex = split(/:/, $mac); return uc (join ":", @hex[0 .. 5]);}sub mac_addr_to_ip($) { my $mac = $_[0]; my @hex = split(/:/, $mac); if (scalar(@hex) != 6) { return "0"; } # convert the hex digits to decimals my $x = hex($hex[3]); my $y = hex($hex[4]); my $z = hex($hex[5]); return "$x.$y.$z";}my $dev;my $rawdev;my $ssid;my $gateway = 0;my $ap = 0;my $txf = 1;my $interval = 10000;my $rate_control = "static-2";my $kernel = 0;GetOptions('device=s' => \$dev, 'ssid=s' => \$ssid, 'gateway' => \$gateway, 'ap!' => \$ap, 'txf!' => \$txf, 'rate-control=s' => \$rate_control, 'kernel!' => \$kernel, ) or usage();if (! defined $dev) { if (`/sbin/ifconfig ath0 2>&1` =~ /Device not found/) { if (`/sbin/ifconfig wlan0 2>&1` =~ /Device not found/) { } else { $dev = "wlan0"; } } else { $dev = "ath0"; }}if (! defined $dev) { usage();}if ($gateway) { $gateway = "true";} else{ $gateway = "false";}my $hostname = `hostname`;my $wireless_mac = mac_addr_from_dev($dev);my $suffix;if ($hostname =~ /rn-pdos(\S+)-wired/) { $suffix = "0.0.$1";} else { $suffix = mac_addr_to_ip($wireless_mac);}my $srcr_ip = "5." . $suffix;my $safe_ip = "6." . $suffix;my $rate_ip = "7." . $suffix;my $srcr_nm = "255.0.0.0";my $srcr_net = "5.0.0.0";my $srcr_bcast = "5.255.255.255";if (! defined $ssid) { $ssid = "roofnet.$srcr_ip";}if ($wireless_mac eq "" or $wireless_mac eq "00:00:00:00:00:00") { print STDERR "got invalid mac address!"; exit -1;}$rawdev = $dev;if ($dev =~ /ath/) { $rawdev = "${dev}raw"; system "/sbin/sysctl -w dev.$dev.rxfilter=0xff > /dev/null 2>&1"; system "/sbin/sysctl -w dev.$dev.rawdev_type=2 > /dev/null 2>&1"; system "/sbin/sysctl -w dev.$dev.rawdev=1 > /dev/null 2>&1"; system "/sbin/ifconfig $rawdev up";}my $iwconfig = "/home/roofnet/bin/iwconfig";if (-f "/sbin/iwconfig") { $iwconfig = "/sbin/iwconfig";}if ($dev =~ /wlan/) { system "/sbin/ifconfig $dev mtu 1800";# system "/home/roofnet/scripts/prism2_param $dev ptype 6"; system "/home/roofnet/scripts/prism2_param $dev pseudo_ibss 1"; system "$iwconfig $dev mode ad-hoc";# system "/home/roofnet/scripts/prism2_param $dev monitor_type 1"; system "$iwconfig $dev essid $ssid"; system "$iwconfig $dev rts off"; system "$iwconfig $dev retries 16"; # make sure we broadcast at a fixed power system "/home/roofnet/scripts/prism2_param $dev alc 0"; system "$iwconfig $dev txpower 23"; system "/sbin/ifconfig $dev up";}# force the interface up if ($dev =~ /ath/) { system "/sbin/ifconfig $dev up txqueuelen 5"; system "$iwconfig $dev channel 6";}my $mode = "b";my $iwconfig_result = `$iwconfig $dev 2>/dev/null`;if ($iwconfig_result =~ /Frequency:(\d+)\.(\d+)GHz/) { my $channel = "$1.$2"; if ($channel > 5.0) { $mode = "a"; } elsif ($dev =~ /ath/) { $mode = "g"; }}print STDERR "using mode $mode\n";system "/sbin/modprobe tun > /dev/null 2>&1";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -