ToDo: Kontrolle
ToDo: Update Links

FAQ - Hamster über einen Router betreiben

Der Router sorgt dafür, dass der Hamster eine permanente Verbindung zum Netz hat. Entweder hast Du eine Standleitung, die natürlich über einen „richtigen“ Router geht, oder Du hast einen Dial-in-Router, der bei Bedarf die Verbindung herstellt. Für die angeschlossenen Systeme sieht es in beiden Fällen wie eine permanente Verbindung aus.

Der Hamster kann hier den Aufbau der Verbindung nicht direkt beeinflussen. Daher musst Du in Deinen Skripten die Befehle zum Wählen und Trennen einfach weglassen. Wenn Du keine Scripte benutzt, dann geht das natürlich auch. Die Menübefehle funktionieren ebenfalls.

Mit folgenden Skripten kann man testen, ob eine Verbindung ins Internet möglich ist, zunächst als Subroutine, die in andere Skripte einzubetten ist, dann als eigenständiges Skript.

sub CheckbyPing
  # Note: Unter Windows 2000 ist „ping“ nicht verwendbar,
  # da es dort immer dasselbe Errorlevel zurückgibt.
  # Als Alternative bietet sich „Fping“ („Fast Pinger“) an
  # (Freeware), Weblink: http://www.kwakkelflap.com/fping.html,
  # die „Execute“-Funktion muss dann ein wenig angepasst werden.

  varset ( $rechner, "Name.oder.IP-Adresse.des.Referenzrechners.angeben" )
  varset ( $response , $try, 1 )
  varset ( $maxtry , 3 )

  if ($rechner = "Name.oder.IP-Adresse.des.Referenzrechners.angeben" )
    warning ( "LART: " + $rechner )
    warning ( "Niemals ein Skript starten, ohne es sich vorher anzusehen!" )
    quit
  endif

  while ($response = 1)
    Execute ("ping -n 1 " + $rechner, "" , 0 , True, $response)
    # Execute ("fping " + $rechner + " -n 1", "" , 0 , True, $response)
    If ( $try = $maxtry )
      warning ( $rechner + " kann aktuell nicht gefunden werden!" )
      quit
     else
      print ( $try + " Ping an " + $rechner + " geschickt." )
      inc ($try)
    endif
  endwhile

  print ( $rechner + " hat auf PING reagiert." )
endsub
# Online-Check.hsc
# Verwendet eine Komponente des MS Internet Explorer, funktioniert laut
# Dokumentation zur „wininet.dll“ (WinINet Reference) erst ab Windows 2000
#
# Prüft erst, ob der IE sich im Offline-Modus befindet. Wenn ja, kommt eine Anfrage,
# ob man online gehen will. Anschließend wird auf Erreichbarkeit einer Adresse
# getestet, die am Anfang dort einzutragen ist, wo in der Voreinstellung die
# Startseite der deutschsprachigen Wikipedia steht.
#!hs2

varset($testURL,"http://de.wikipedia.org/")
#                ^^^^^^^^^^^^^^^^^^^^^^^^
#                Hier Adresse eintragen.
if InternetGetConnectedStateEx($testURL)
  AddLog( "* InternetGetConnectedStateEx: ++ OK!", $logOK )
 else
  AddLog( "* InternetGetConnectedStateEx: -- Failed!",$logFail )
endif

# Die Message-Boxen können auch auskommentiert werden.
if CheckOpenUrl($testURL)>0
  MsgBox ("Test-URL " + $testURL + " erreichbar.", "Online-Check: Online", 0x40|0x0)
  AddLog( "* CheckOpenUrl: ++ online!", $logOK )
 else
  MsgBox ("Test-URL " + $testURL + " NICHT erreichbar!", "Online-Check: Offline", 0x30|0x0)
  AddLog( "* CheckOpenUrl: -- offline!",$logFail )
endif

sub InternetGetConnectedStateEx($strUrl)
  varset($buf, MemAlloc(len($strUrl)+1))
  MemSetStr($buf, $strUrl)
  varset( $p1, MemAlloc(4) )
  MemSetInt( $p1, 0 )
  varset( $p2, MemAlloc(4) )
  MemSetInt( $p2, 0 )
  varset($result, DllCall($InternetGetConnectedStateEx,$p1,$p2,$buf,0))
  varset( $dwFlags, MemGetInt($p1) )
  varset( $inetConnection, "<unknown>" )

  if ($p2)
    $inetConnection= MemGetStr($p2)
  endif
  MemFree($p2)
  MemFree($p1)
  MemFree($buf)

  Print( "# InternetGetConnectedStateEx(0x"+hex($dwFlags,2)+", "_ 
         +$inetConnection+"): "+ iif($result,"TRUE","FALSE"))
  if (($dwFlags & 0x02 ) = 0 )
    print( "Lokales LAN ist offline. Check Hardware." )
    return(0)
  endif

  if ($dwFlags & 0x20 )
    print( "IE ist im Offline-Modus.")
    return(InternetGoOnline($strUrl))
  endif
  return($result)
endsub

sub InternetGoOnline($strUrl)
  varset($buf, MemAlloc(len($strUrl)+1))
  MemSetStr($buf, $strUrl)
  varset($result, DllCall( $InternetGoOnline, $buf, 0, 0) )
  MemFree($buf)
  return($result)
endsub

sub CheckOpenUrl($strUrl)
  var($io_h,$iou_h)
  varset($buf, MemAlloc(len($strUrl)+1))
  MemSetStr($buf, $strUrl)
  $io_h=DllCall($InternetOpen, 0, 1, 0, 0, 0)
  $iou_h=DllCall($InternetOpenUrl, $io_h, $buf,0,0,0x80000000,0)
  DllCall( $InternetCloseHandle, $io_h)
  MemFree($buf)
  return($iou_h)
endsub

#!initialize
  varset($InternetOpen, "wininet.dll|InternetOpenA|n|nnnnn")
  varset($InternetOpenUrl, "wininet.dll|InternetOpenUrlA|n|nnnnnn")
  varset($InternetCheckConnection,_
      "wininet.dll|InternetCheckConnectionA|n|nnn")
  varset($InternetGetConnectedStateEx,_
      "wininet.dll|InternetGetConnectedStateExA|n|nnnn")
  varset($InternetGoOnline,"wininet.dll|InternetGoOnlineA|n|nnn")
  varset($InternetCloseHandle,"wininet.dll|InternetCloseHandle|n|n")
  varset( $hWinInet, DllLoad("wininet.dll") )

  if $hWinInet=0
    error("DLL ""wininet.dll"" not found." )
    return(-1)
  endif

  if HamVersion(0)> "2.1.0.11"
    varset($logOK, 9)
    varset($logFail, 10)
   else
    varset($logOK, 3)
    varset($logFail, 3)
  endif
  return(0)
  
#!finalize
  DllFree( $hWinInet )
  return(0)