Port Redirect
Posted by HellRaz0r
Thursday, January 11, 2007
Description: This script enables you to redirect incoming traffic to a remote ip/port.
alias redirect {
if (!$3) { echo -a Invalid syntax, use like this: /redirect <localport> <remoteip> <remoteport> | halt }
hadd -m $+(Redir_,$1) localport $1
hadd -m $+(Redir_,$1) remoteip $2
hadd -m $+(Redir_,$1) remoteport $3
var %sockname $+(Redir_listen_,$1)
.sockclose %sockname | .socklisten %sockname $1
}
on *:socklisten:Redir_listen_*:{
var %localport $sock($sockname).bindport, %htable = $+(Redir_,%localport)
var %remoteip $hget(%htable,remoteip), %remoteport = $hget(%htable,remoteport)
var %sockin Redir_in_ $+ %remoteip $+ : $+ %remoteport
var %sockout Redir_out_ $+ %remoteip $+ : $+ %remoteport
var %logfile Redir_ $+ %localport $+ .log, %blog = Redir_ $+ %localport $+ _Binary.log
.remove sockdata.dat | .remove %logfile | .remove %blog
sockaccept %sockin
sockmark %sockin %sockout
pause s 1
if (!$exists(sockdata.dat)) { sockopen %sockout %remoteip %remoteport | sockmark %sockout %localport }
}
on *:sockread:Redir_in_*:{
sockread &datain
var %sockout $sock($sockname).mark
var %localport $sock($sockname).bindport, %htable = $+(Redir_,%localport)
var %remoteip $hget(%htable,remoteip), %remoteport = $hget(%htable,remoteport)
if (!$sock(%sockout)) {
bwrite sockdata.dat 1 -1 &datain
sockopen %sockout %remoteip %remoteport
sockmark %sockout %localport
}
else {
if ($sock(%sockout).status == Connecting) pause s 1
sockwrite %sockout &datain
}
var %logfile Redir_ $+ %localport $+ .log, %blog = Redir_ $+ %localport $+ _Binary.log
bwrite %logfile -1 -1 ->
bwrite %logfile -1 -1 &datain
if ($bvar(&datain,0) < 800) write %blog -> $bvar(&datain,1-)
}
on *:sockopen:Redir_out_*:{
if ($exists(sockdata.dat)) {
bread sockdata.dat 1 $file(sockdata.dat).size &data
sockwrite $sockname &data
.remove sockdata.dat
}
}
on *:sockread:Redir_out_*:{
sockread &dataout
var %localport $sock($sockname).mark, %htable = $+(Redir_,%localport)
var %remoteip $hget(%htable,remoteip), %remoteport = $hget(%htable,remoteport)
var %sockin Redir_in_ $+ %remoteip $+ : $+ %remoteport
var %sockout Redir_out_ $+ %remoteip $+ : $+ %remoteport
if (!$sock(%sockin)) .sockclose %sockout
else sockwrite %sockin &dataout
var %logfile Redir_ $+ %localport $+ .log, %blog = Redir_ $+ %localport $+ _Binary.log
bwrite %logfile -1 -1 <-
bwrite %logfile -1 -1 &dataout
if ($bvar(&dataout,0) < 700) write %blog <- $bvar(&dataout,1-)
}