Programm über Port Zugriff starten

Status
Für weitere Antworten geschlossen.

franki4711

Benutzer
Mitglied seit
08. Apr 2012
Beiträge
10
Punkte für Reaktionen
0
Punkte
1
Hallo an Alle

ich möchte gerne über einen Portzugriff von außen (kleines Intranet) auf meine DS212+ ein Programm starten.
Ist dies technisch möglich?
Beispiel: Ich habe squid über ipkg installiert. Leider läßt Squid die DS die Festplatten nicht ins Standby
Daher die Idee, Squid zu stoppen wenn kein Client mehr den Port 8080 als Proxy nutzt, (hier im Forum bereists gefunden)
und Squid wieder starten sobald ein Client den Proxy auf Port 8080 benötigt.

Gruß Franki4711
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.469
Punkte für Reaktionen
2.938
Punkte
423
Hallo Franki4711,

eine Möglichkeit, Serverprozesse erst bei Portzugriffen zu starten, gibt es schon und zwar über "inetd", konfigurierbar über /etc/inetd.conf. Der telnet-Server (telnetd) oder svn benutzen z.B. diesen Mechanismus. Ob das auch mit squid funktioniert, kann ich dir allerdings nicht sagen. Frag mal Tante Google.

Gruß Benares
 

franki4711

Benutzer
Mitglied seit
08. Apr 2012
Beiträge
10
Punkte für Reaktionen
0
Punkte
1
Hallo Benares,

Klasse Tip, Einrichtung ist ja auch leicht zu finden, ich würde dann webcache verwendeten, der zeigt in der Service-DAtei auf Port 8080.
Kann es zum Problem werden, wenn mehrere Clients zugreifen, und inetd dann mehrere Squid's starten will?

Gruß frank4711
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
ich glaube ehrlich gesagt kaum, dass squid mit (x)inetd sinnvoll läuft. Besser squid als Daemon starten
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.469
Punkte für Reaktionen
2.938
Punkte
423
Kann es zum Problem werden, wenn mehrere Clients zugreifen, und inetd dann mehrere Squid's starten will?
Keine Ahnung. Ist zwar wohl eher dafür gedacht, wenn ein Server-Prozess eine Verbindung bedient - aber probiers einfach mal aus.

Gruß Benares
 

franki4711

Benutzer
Mitglied seit
08. Apr 2012
Beiträge
10
Punkte für Reaktionen
0
Punkte
1
habe jetzt viel hin und her getestet, auch mit kleinem Script welches abfragt, ob Squid schon läuft.
Funktioniert nicht.

Hat noch jemand eine Idee wie ich Squid starten kann, wenn ich es vorher gestoppt habe (über das script hier im Forum wenn keine clients mehr verfügbar sind)?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
habe jetzt viel hin und her getestet, auch mit kleinem Script welches abfragt, ob Squid schon läuft.
Funktioniert nicht.
Hier mal ein kleiner Codeschnippel wie man squid prüfen kann
Code:
[ "x$(ps | grep squid | grep -v grep)" != 'x' ] && echo 'squid laeuft' && exit 0
echo "Squid laeuft nicht" && exit 1
Obiges müsste dir eigentlich einen laufenden Squid ermitteln können

Hat noch jemand eine Idee wie ich Squid starten kann, wenn ich es vorher gestoppt habe (über das script hier im Forum wenn keine clients mehr verfügbar sind)?
Mit einem sauberen Start-Stop-Script müsste das eigentlich gehen z.B.
Code:
#!/bin/sh

stopSquid() {
  [ "x$(ps | grep squid | grep -v grep)" = 'x' ] && echo 'Squid laeuft nicht.' && exit 1
  KOMMANDO FUER SQUID STOP
  [ "x$(ps | grep squid | grep -v grep)" != 'x' ] && echo 'Squid konnte nicht gestoppt werden' && exit 1
  echo 'Squid erfolgreich gestoppt' && exit 0
}

startSquid() {
 [ "x$(ps | grep squid | grep -v grep)" != 'x' ] && echo 'Squid laeuft bereits.' && exit 1
 KOMMANDO FUER SQUID START
 [ "x$(ps | grep squid | grep -v grep)" = 'x' ] && echo 'Squid konnte nicht gestartet werden' && exit 1
 echo 'Squid erfolgreich gestartet' && exit 0
}

case "$* in
 'start')
  startSquid 
 ;;
 'stop')
  stopSquid
 ;;
 'restart')
  stopSquid
  sleep 1
  startSquid
 ;;
 *)
  echo 'Usage stop|start|restart'
 ;;
esac
das wäre ein Bsp für ein Start/Stop Script. Ich kenne aber das Kommando für Squid nicht auswendig, daher wirst du das in den beiden Funktionen (startSquid und stopSquid) noch anpassen müssen
 

franki4711

Benutzer
Mitglied seit
08. Apr 2012
Beiträge
10
Punkte für Reaktionen
0
Punkte
1
Hallo jahlives,

die Prüfung ob Squid schon läuft habe ich hinbekommen, ich wollte das nur einbauen in den inetd-Aufruf. Darüber wird aber nichts gestartet. D.h. bekomme Squid nicht zum laufen.

Ich habe das jetzt anders gelöst:
Wau zu deinen Scripts (die verstehe ich nicht so schnell, da ich mich erst ein paar Tage mit Script-Tipps aus diesem Forum beschäftige)

1. squidstart.sh (habe ich in der S80squid mit eingebaut)
Ziel hier: Warten bis kein Client (30 Min) mehr angemeldet ist, dann Squid stoppen
Zudem wird das nächste Script squidsleep.sh gestartet
Code:
Rich (BBCode):
   #!/bin/sh

LOGFILE=/opt/var/squid/logs/shutdown_squid.log

log() {
echo `date +%c` $1 >> $LOGFILE
}

# stoppt Squid sobald 30 Min kein Client angemeldet
#
# waittime (in seconds)
PC1=192.168.78.2
PC2=192.168.78.3
Stick=192.168.78.32
NB=192.168.78.101
TV=192.168.78.4

waittime=1800
online=1

while true; do
	if ! netstat -n | grep $PC1'.*ESTABLISHED' > /dev/null; then
	   if ! netstat -n | grep $PC2'.*ESTABLISHED' > /dev/null; then
	      if ! netstat -n | grep $Stick'.*ESTABLISHED' > /dev/null; then
 		 if ! netstat -n | grep $NB'.*ESTABLISHED' > /dev/null; then
		    if ! netstat -n | grep $TV'.*ESTABLISHED' > /dev/null; then
		       # kein Client verbunden stopp von Squid
		       online=0
		    fi
	 	 fi
	      fi
	   fi
	fi
	if [ $online -eq 0 ]; then
           # kein Client verbunden stopp von Squid
           log "stop von Squid"
           /opt/etc/init.d/S80squid stop >> $LOGFILE
	   # starte script squidsleep
	   /opt/var/squid/run/squidsleep.sh&
	   exit # Schleife verlassen
        fi
        sleep $waittime
done;
2. squidsleep.sh (wird in squidstart.sh eingebaut)
Ziel hier: Warten auf eine Clientanmeldung (1 Min), dann Squid wieder starten
code:
Rich (BBCode):
    #!/bin/sh

LOGFILE=/opt/var/squid/logs/shutdown_squid.log

log() {
echo `date +%c` $1 >> $LOGFILE
}

# startet Squid innerhalb 60 Sekunden, wenn sich Client anmeldet
#
# waittime (in seconds)
waittime=60
# Clients
PC1=192.168.78.2
PC2=192.168.78.3
Stick=192.168.78.32
NB=192.168.78.101
TV=192.168.78.4

log "starte squidsleep Schleife"

while true; do
	# Variable initialisieren
	online=1
	if ! netstat -n | grep $PC1'.*ESTABLISHED' > /dev/null; then
	   if ! netstat -n | grep $PC2'.*ESTABLISHED' > /dev/null; then
	      if ! netstat -n | grep $Stick'.*ESTABLISHED' > /dev/null; then
 		 if ! netstat -n | grep $NB'.*ESTABLISHED' > /dev/null; then
		    if ! netstat -n | grep $TV'.*ESTABLISHED' > /dev/null; then
		       # keine Client Verbindung
		       online=0
		    fi
		 fi
	      fi
	   fi
	fi
	if [ $online -eq 1 ]; then
           # Client verbunden start von Squid
           /opt/etc/init.d/S80squid start >> $LOGFILE
	   # !! script squidstart.sh wird über S80squid gestartet
	   # /opt/var/squid/run/squidstart.sh >> $LOGFILE
	   exit # script beenden
        fi
        sleep $waittime
done;
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Wie gesagt ich kann mir kaum vorstellen, dass squid mit inetd auch nur annährend laufen wird. Daneben macht es imho absolut keinen Sinn, denn http ist ein zustandsloses Protokoll d.h. der Client baut eine Verbindung für jede einzelne Ressource auf. Stell dir vor was passiert wenn der Squid einen Request (Seite) durch hat. Dann würde inetd den squid beenden, nur um ihn gleich wieder anzuwerfen, wenn du einen Link auf der Seite klickst. squid kann beim Starten durchaus ein paar Sekunden brauchen bis er ready ist. Wenn squid denn via inetd oder xinetd ginge, wäre das der grösste Overhead der Geschichte, denn du wirst fürs Starten um Faktor 1000 mal länger brauchen als für den eigentlichen Request ;-) ;-)

Bei deinen Scripten würde ich die Art der Verbindung mehr einschränken. Den squid kannst du ja eigentlich runterfahren wenn keine Verbindung mehr auf Port 3128 beim Server besteht. Ich würde das jetzt weniger an die IP der Clients binden. Sonst schiesst du allenfalls den Squid mal ab wenn irgendein Medienclient gerade dabei ist seine Firmware upzudaten ;-)
 

franki4711

Benutzer
Mitglied seit
08. Apr 2012
Beiträge
10
Punkte für Reaktionen
0
Punkte
1
Hallo jahlives,
Ja ersten Teil über die Infos verstanden. Habe ich ja auch bereits anders realisiert.
Wenn du eine Idee hast, wie ich die Verbindung eines Port abfragen kann, dann her damit, wäre super!!

Gruß Franki4711
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
ich würde den Port schon auch mit netstat abfragen, aber ich würde es nicht an den IPs festmachen, sondern nur am Port und am Connection Status z.B.
Code:
netstat -n -A inet | grep 192.168.199.7:3128
sollte dir alle aktiven Verbindungen auf Port 192.168.199.7:3128 anzeigen. Wobei die 7 die IP der DS ist, die den Squid laufen hat.
Wenn du es an den Cient-IPs festmachen willst, dann würde ich empfehlen egrep (gibt es afaik via ipkg) zu verwenden
Code:
netstat -n -A inet | grep 192.168.199.7:3128 | egrep IP_PC\|IP_PC1\|IP_MEDIACLIENT
damit könntest du mehrere Client-IPs auf einen Schlag testen
 

Paracelsus

Benutzer
Mitglied seit
27. Mai 2012
Beiträge
23
Punkte für Reaktionen
0
Punkte
0
Hab nur die Eingangsfrage gelesen und den Rest überflogen, aber auf den flüchtigen Blick scheint als ob ihr das Rad neu erfinden möchtet...

IPKG setze ich mal voraus, was spricht also gegen knock/knockd? Macht genau das was der Fragesteller sich vorstellt...

T> ipkg info knock
Package: knock
Version: 0.5-5
Depends: libpcap, psmisc
Status: unknown ok not-installed
Section: security
Architecture: i686
maintainer: Don Lubinski <nlsu2@shine-hs.com>
MD5Sum: 33a8802970057d23c8bfbda6d265ccbf
Size: 19345
Filename: knock_0.5-5_i686.ipk
Source: http://www.zeroflux.org/knock/files/knock-0.5.tar.gz
Description: knockd is a port-knock server. It listens to all traffic on an ethernet (or PPP) interface, looking for special knock sequences of port-hits. A client makes these port-hits by sending a TCP (or UDP) packet to a port on the server. This port need not be open -- since knockd listens at the link-layer level, it sees all traffic even if it is destined for a closed port. When the server detects a specific sequence of port-hits, it runs a command defined in its configuration file. This can be used to open up holes in a firewall for quick access.
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat 

 
 
  AdBlocker gefunden!

Du bist nicht hier, um Support für Adblocker zu erhalten. Dein Adblocker funktioniert bereits ;-)

Klar machen Adblocker einen guten Job, aber sie blockieren auch nützliche Funktionen.

Das Forum wird mit hohem technischen, zeitlichen und finanziellen Aufwand kostenfrei zur Verfügung gestellt. Wir zeigen keine offensive Werbung und bemühen uns um eine dezente Integration.

Bitte unterstütze dieses Forum, in dem du deinen Adblocker für diese Seite deaktivierst.

Du kannst uns auch über unseren Kaffeautomat einen Kaffe ausgeben oder ein PUR Abo abschließen und das Forum so werbefrei nutzen.

Vielen Dank für Deine Unterstützung!