home *** CD-ROM | disk | FTP | other *** search
/ ftp.madoka.org / 2014.12.ftp.madoka.org.tar / ftp.madoka.org / pub / plum / plum2_33_1.lzh / module / ctcp / dcc / nat.plm < prev    next >
Text File  |  1999-03-24  |  4KB  |  131 lines

  1. <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"><!-- $_ if 0; # -*- perl -*-
  2. # $Id: nat.plm,v 2.4 1998/12/24 04:24:15 hasegawa Exp $
  3. # copyright (c)1998 Yoshinori Hasegawa <hasegawa@madoka.org>
  4.  
  5. package ctcp_dcc_nat;
  6.  
  7. $_ = 'ctcp_dcc_nat';
  8.  
  9. sub cpcs_dcc {
  10.   local($clientno, $prefix, $cmd, @params) = @_;
  11.   local($userno, @args, $ip, $from, $to, $peer, $host, $adrs);
  12.   $userno = $'userno[$clientno];
  13.   @args = split(/\s+/, $params[1]);
  14.   $ip = &parse_ip($args[2]);
  15.   foreach $map (&'property($userno, 'mapping')) {
  16.     ($from, $to) = split(/\s+/, $map);
  17.     next unless $to;
  18.     next unless &parse_ip($from) == $ip;
  19.     $args[2] = &parse_ip($to);
  20.     $params[1] = join(' ', @args);
  21.     return ($prefix, $cmd, @params);
  22.   }
  23.   if (&check_private($userno, $ip)) {
  24.     $peer = (&'peername($clientno))[1];
  25.     if (&check_private($userno, $peer)) {
  26.       $host = (split(/\@/, &'user($'server[$clientno]), 2))[1];
  27.       $adrs = &parse_ip($host);
  28.       if ($adrs) {
  29.         $args[2] = $adrs;
  30.       }
  31.     } else {
  32.       $args[2] = $peer;
  33.     }
  34.     $params[1] = join(' ', @args);
  35.   }
  36.   return ($prefix, $cmd, @params);
  37. }
  38.  
  39. sub check_private {
  40.   local($userno, $ip) = @_;
  41.   local($start, $end);
  42.   foreach $private (&'property($userno, 'private')) {
  43.     ($start, $end) = split(/\s+/, $private);
  44.     next unless $end;
  45.     next unless $ip >= &parse_ip($start);
  46.     next unless $ip <= &parse_ip($end);
  47.     return 1;
  48.   }
  49.   return 0;
  50. }
  51.  
  52. sub parse_ip {
  53.   local($ip) = @_;
  54.   local(@addr);
  55.   if ($ip =~ /^\d+$/) {
  56.     return $ip;
  57.   } elsif ($ip =~ /^[\d\.]+$/) {
  58.     @addr = split(/\./, $ip);
  59.     return unpack('N', pack('C4', @addr, 0, 0, 0));
  60.   } else {
  61.     return unpack('N', (gethostbyname($ip))[4] || "\0\0\0\0");
  62.   }
  63.   return 0 unless $ip;
  64. }
  65.  
  66. __END__
  67. --><HTML><HEAD>
  68. <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-2022-JP">
  69. <LINK REV="made" HREF="mailto:hasegawa@madoka.org">
  70. <TITLE>ctcp/dcc/nat.plm</TITLE></HEAD><BODY>
  71.  
  72. $B%*%s%i%$%s%I%-%e%a%s%H(B
  73.  
  74.  
  75. <HR><H3>$BL>A0(B</H3>
  76.  
  77. ctcp/dcc/nat.plm - NAT$B$r7PM3$7$F(BDCC$B$rMxMQ$9$k(B
  78.  
  79.  
  80. <HR><H3>$B@bL@(B</H3>
  81.  
  82. NAT$B$r;HMQ$7$F$$$k>l9g$K!"(BNAT$B$NFbB&$+$i(BDCC$B$NAw?.$,9T$($k$h$&$K$7$^$9!#(B
  83. $B%W%i%$%Y!<%H$J(BIP$B%"%I%l%9$H%0%m!<%P%k$J(BIP$B%"%I%l%9$NBP1~$,$"$i$+$8$a(B
  84. $B$o$+$C$F$$$k>l9g$O(Bplum$B$r$I$3$G<B9T$7$F$b9=$$$^$;$s$,!"(B
  85. $B%@%$%"%k%"%C%W%k!<%?$J$I$r;HMQ$7$F$$$F(BIP$B%"%I%l%9$NBP1~$,(B
  86. $B$o$+$i$J$$>l9g$O!"(Bplum$B$r(BNAT$B$N$9$030B&$G<B9T$9$k$+!"(B
  87. plum$B$r(BNAT$B$NFbB&$G<B9T$7$FD>@\%5!<%P$K@\B3$9$kI,MW$,$"$j$^$9!#(B
  88. $B$3$N%b%8%e!<%k$G(BDCC$B$,Aw?.$G$-$k$h$&$K$J$k$N$O(BNAT$B$N>l9g$@$1$G!"(B
  89. IP masquerade$B$N>l9g$O$3$N%b%8%e!<%k$r;H$C$F$b(BDCC$B$OAw?.$G$-$^$;$s!#(B
  90.  
  91.  
  92. <HR><H3>$B%W%m%Q%F%#(B</H3>
  93.  
  94. <DL>
  95. <DT>  ctcp.dcc.nat.mapping* $B%W%i%$%Y!<%H(BIP $B%0%m!<%P%k(BIP
  96. </DT>
  97. <DD>    $B$=$l$>$l$N%^%7%s$KBP1~$9$k(BIP$B%"%I%l%9$N%^%C%T%s%0$r;XDj$7$^$9!#(B
  98.         $B%W%i%$%Y!<%H(BIP$B$+$iAw$i$l$F$-$?(BDCC$B$r%0%m!<%P%k(BIP$B$KJQ49$7$F(B
  99.         $BAw?.@h$NAj<j$KAw$j$^$9!#(B
  100. </DD>
  101. <DT>  ctcp.dcc.nat.private* $B@hF,%"%I%l%9(B $B=*N;%"%I%l%9(B
  102. </DT>
  103. <DD>    $B%W%i%$%Y!<%H$J(BIP$B%"%I%l%9$NHO0O$r;XDj$7$^$9!#(B
  104.         $BAw$m$&$H$9$k(BDCC$B$,$3$NHO0OFb$N$b$N$+$i$G$"$l$P!"(B
  105.         IP$B%"%I%l%9$rJQ49$7$^$9!#(B
  106. </DD>
  107. </DL>
  108.  
  109.  
  110. <HR><H3>$B@_DjNc(B</H3>
  111.  
  112. <PRE>
  113. + ctcp/dcc/nat.plm
  114. ctcp.dcc.nat.mapping: 192.168.1.1 133.6.108.1
  115. ctcp.dcc.nat.mapping: 192.168.1.2 133.6.108.2
  116. </PRE>
  117.  
  118. $B!V(B192.168.1.1$B!W$+$iAw$i$l$F$-$?(BDCC$B$r!V(B133.6.108.1$B!W$+$iAw$C$?$h$&$K(B
  119. $B8+$;$+$1$FAw?.@h$NAj<j$KAw$j$^$9!#$^$?!V(B192.168.1.2$B!W$+$iAw$i$l$F$-$?(B
  120. DCC$B$r!V(B133.6.108.2$B!W$+$iAw$i$l$F$-$?$h$&$K8+$;$+$1$^$9!#(B
  121.  
  122. <PRE>
  123. + ctcp/dcc/nat.plm
  124. ctcp.dcc.nat.private: 192.168.0.0 192.168.255.255
  125. </PRE>
  126.  
  127. $B!V(B192.168.0.0$B!W$+$i!V(B192.168.255.255$B!W$N4V$+$iAw$i$l$F$-$?(BDCC$B$r(B
  128. $B%0%m!<%P%k$J(BIP$B%"%I%l%9$KJQ49$7$FAw?.@h$NAj<j$KAw$j$^$9!#(B
  129.  
  130. </BODY></HTML>
  131.