UPnP Port Manager for mIRC

Moderator: GeekShed.Net Staff

UPnP Port Manager for mIRC

Postby Ford » Sun Jul 25, 2010 3:43 am

Image
This dialog is just a demonstration script for a UPnP dll that I made.
This script will allow you to view, add and delete ports that are forwarded to your router with UPnP.
Almost all modern routers have UPnP, however, it is not always on by default. You may have to turn on UPnP in your routers settings.

How to use:
  • Check your routers settings and make sure UPnP is turned ON.
  • Copy the script to a new remote and save with a unique file name.
  • Right click Channel or Status and select UPnP Port Manager.
  • Click Initialize and wait several seconds.
  • Right click Channel or Status and select UPnP Port Manager.
  • Click Port Manager
The script will download the dll on it's own.
If you are interested in this dll for another project, scroll down in the script and there are detailed syntax etc. in the comments.
Code: Select all
;UPnP Port Manager by Ford_Lawnmower irc.geekshed.net #Script-Help
alias UPnP return $scriptdirUPnP.dll
menu channel,status,menubar {
  .UPnP Port Manager
  ..$iif(!$exists($UPnP),$style(2)) Port Manager:dialog $iif($dialog(UPnP),-v,-m) UPnP UPnP
  ..$iif($exists($UPnP),$style(2)) Initialize:{
    GetUPnPDll
    WriteIPConfig
    echo -a Downloading UPnP.dll to $scriptdir
    echo -a This will take several seconds. Please be patient.
  }
}
On *:Dialog:UPnP:Init:*: {
  didtok -a $dname 1 126 $replace($listports,$chr(7),$chr(1))
  didtok -a $dname 9 44 TCP,UDP,BOTH
  did -a $dname 7 $GetLanIP
  did -c $dname 9 1
}
On *:Dialog:UPnP:Sclick:2,11: {
  if ($did == 2) {
    if ($did($dname,1)) {
      tokenize 1 $v1
      DelPortsGUI $3-
      didtok -ra $dname 1 126 $replace($listports,$chr(7),$chr(1))
    }
  }
  else {
    tokenize 32 $did($dname,7) $did($dname,8) $did($dname,10)
    if ($regex($1-,((?:[\d]{1,3})\x2E(?:[\d]{1,3})\x2E(?:[\d]{1,3})\x2E(?:[\d]{1,3}))\s([\d]{1,})\s([^\s]*))) {
      if ($did($dname,9) == BOTH) {
        if ((!$FwdPorts($regml(1),$regml(2),TCP,$regml(3)))) {
          var %r $input(Unable to forward TCP $regml(2) to $regml(1),o,UPnP Port Manager,,)
          if (!$FwdPorts($regml(1),$regml(2),UDP,$regml(3))) {
            var %r $input(Unable to forward UDP $regml(2) to $regml(1),o,UPnP Port Manager,,)
          }
          else {
            var %r $input(Successfully forwarded UDP $regml(2) to $regml(1),o,UPnP Port Manager,,)
            didtok -ra $dname 1 126 $replace($listports,$chr(7),$chr(1))
          }
        }
        elseif (!$FwdPorts($regml(1),$regml(2),UDP,$regml(3))) {
          var %r $input(Unable to forward UDP $regml(2) to $regml(1),o,UPnP Port Manager,,)
          var %r $input(Successfully forwarded TCP $regml(2) to $regml(1),o,UPnP Port Manager,,)
          didtok -ra $dname 1 126 $replace($listports,$chr(7),$chr(1))
        }
        else {
          var %r $input(Successfully forwarded both TCP and UDP $regml(2) to $regml(1),o,UPnP Port Manager,,)
          didtok -ra $dname 1 126 $replace($listports,$chr(7),$chr(1))
        }
      }
    }
  }
}
dialog UPnP {
  title "UPnP Port Manager"
  size -1 -1 255 176
  option dbu
  combo 1, 5 6 244 99, vsbar
  button "Delete", 2, 211 109 37 12
  text "IPAddress:", 3, 28 130 27 8, center
  text "Port:", 4, 82 130 25 8, center
  text "Protocol:", 5, 131 130 25 8, right
  text "Description:", 6, 183 130 31 8, center
  edit "", 7, 17 142 50 10, limit 15
  edit "", 8, 76 142 39 10
  combo 9, 130 142 28 11, drop
  edit "", 10, 171 142 56 10, limit 20
  button "Forward", 11, 211 161 37 12
}
alias -l GetUPnPDll GetDll fordlawnmower.googlecode.com /files/UPnP.dll $nospace($scriptdir) UPnP.dll
alias -l GetDll {
  var %dir $nospace($3)
  if ($isfile($qt($+(%dir,$4)))) { .remove $qt($+(%dir,$4)) }
  var %sockname $+(GetDll,$ticks,$r(1,$ticks))
  if (!$isdir($qt(%dir))) { mkdir $qt(%dir) }
  sockopen %sockname $1 80
  sockmark %sockname $1-
}
On *:sockopen:GetDll*:{
  sockwrite -nt $sockname GET $gettok($sock($sockname).mark,2,32) HTTP/1.0
  sockwrite -n $sockname Host: $gettok($sock($sockname).mark,1,32) $+ $crlf $+ $crlf
}
On *:sockread:GetDll*:{
  if (!$gettok($sock($sockname).mark,5,32)) {
    var %GetDll | sockread %GetDll
    if (!%GetDll) { sockmark $sockname $sock($sockname).mark 1 }
  }
  else {
    sockread &GetDll
    bwrite -s $qt($+($nospace($gettok($sock($sockname).mark,3,32)),$gettok($sock($sockname).mark,4,32))) -1 -1 &GetDll
  }
}
alias -l nospace {
  if ($chr(7) isin $1-) return $replace($1-,$chr(7),$chr(32))
  else return $replace($1-,$chr(32),$chr(7))
}
On *:Connect: WriteIPConfig
On *:Load: WriteIPConfig
alias -l WriteIPConfig {
  var %tempdir $gettempdir
  if (!$exists($+(%tempdir,\,getipconfig.bat))) write -c $+(%tempdir,\,getipconfig.bat) ipconfig /all > $+(%tempdir,\,ipconfig.dat)
  run $+(%tempdir,\,getipconfig.bat)
}
alias -l GetTempDir {
  if (!$com(tempdir)) .comopen tempdir WScript.Shell
  if (!$comerr) var %Process $com(tempdir,ExpandEnvironmentStrings,1,bstr*,$+(%,temp,%)), %result $com(tempdir).result
  if ($com(tempdir)) .comclose tempdir
  return %result
}
alias -l GetLanIP {
  var %tempdir $gettempdir
  if (!$exists($+(%tempdir,\,ipconfig.dat))) WriteIPConfig
  var %result = $read($+($gettempdir,\,ipconfig.dat), w, *IPv4 Address*, 1)
  %result = $regex(%result,/IPv4 Address.*:\s((?:[\d]{1,3})\x2E(?:[\d]{1,3})\x2E(?:[\d]{1,3})\x2E(?:[\d]{1,3}))/)
  return $regml(1)
}
;Com Stuff for UPnP.dll below
;dispports Displays all active UPnP ports
;Syntax /dispports or $dispports Will return 1 or higher on error.
alias dispports {
  OpenCom $nospace($UPnP) UPnPdisp UPnP.Class1
  if (!$com(UPnPdisp)) return 1
  var %result $com(UPnPdisp,DispPorts,3), %error $com(UPnPdisp).error
  if ($com(UPnPdisp)) .comclose UPnPdisp
  return %error
}
;listports will return a list of active UPnP Ports.
;Syntax $listports (ie %var = $listports) Will return 0 on error.
alias listports {
  OpenCom $nospace($UPnP) UPnPlist UPnP.Class1
  if (!$com(UPnPlist)) return 1
  var %process $com(UPnPlist,ListPorts,3), %result $com(UPnPlist).result, %error $com(UPnPlist).error
  if ($com(UPnPlist)) .comclose UPnPlist
  return $iif(%error,0,%result)
}
;fwdports Will forward 1 port at a time.
;Syntax %var = $fwdports(ip,port,protocol,description)
;Check $var for success or fail. 1 for success and 0 for fail.
;*Note that fail may mean that the port is already in use by UPnP.
alias fwdports {
  OpenCom $nospace($UPnP) UPnPfwd UPnP.Class1
  if (!$com(UPnPfwd)) return 1 
  var %process $com(UPnPfwd,FwdPorts,3,bstr,$1,bstr,$2,bstr,$upper($3),bstr,$4), %result $com(UPnPfwd).result, %error $com(UPnPfwd).error
  if ($com(UPnPfwd)) .comclose UPnPfwd
  return $iif(%error,0,%result)
}
;fwdportsgui Will forward 1 port at a time with a gui response.
;Syntax /fwdportsgui ip port protocol description or $fwdportsgui(ip,port,protocol,description) Will return 1 or higher on error.
alias fwdportsgui {
  OpenCom $nospace($UPnP) UPnPfwdgui UPnP.Class1
  if (!$com(UPnPfwdgui)) return 1 
  var %result = $com(UPnPfwdgui,FwdPortsGUI,3,bstr,$1,bstr,$2,bstr,$upper($3),bstr,$4), %error $com(UPnPfwdgui).error
  if ($com(UPnPfwdgui)) .comclose UPnPfwdgui
  return %error
}
;delports Will delete active UPnP ports 1 at a time.
;Syntax %var = $delports(port,protocol) Check %var for success or fail. 1 for success 0 for fail.
;*Note that fail may mean that the port did not exist in UPnP.
alias delports {
  OpenCom $nospace($UPnP) UPnPdel UPnP.Class1
  if (!$com(UPnPdel)) return 1
  var %process $com(UPnPdel,DelPorts,3,bstr,$1,bstr,$upper($2)), %result $com(UPnPdel).result, %error $com(UPnPdel).error
  if ($com(UPnPdel)) .comclose UPnPdel
  return $iif(%error,0,%result)
}
;delportsgui Will delete active UPnP ports 1 at a time.
;Syntax /delportsgui port protocol or $delportsgui(port,protocol) Will return 1 or higher on error.
alias delportsgui {
  OpenCom $nospace($UPnP) UPnPdelgui UPnP.Class1
  if (!$com(UPnPdelgui)) return 1
  var %result = $com(UPnPdelgui,DelPortsGUI,3,bstr,$1,bstr,$upper($2)), %error $com(UPnPdelgui).error
  if ($com(UPnPdelgui)) .comclose UPnPdelgui
  return %error
}
alias -l OpenCom {
  if (!$com($2)) .comopen $2 $3
  if ($comerr) {
    .comreg $nospace($1)
    if (!$com($2)) .comopen $2 $3
  }
}
Ford
 
Posts: 48
Joined: Wed Oct 28, 2009 1:01 am

Re: UPnP Port Manager for mIRC

Postby Ford » Sun Jul 25, 2010 4:46 pm

**Updated** To include your lan ip by default.
Ford
 
Posts: 48
Joined: Wed Oct 28, 2009 1:01 am


Return to Script help

Who is online

Users browsing this forum: No registered users and 14 guests