Dieses Verhalten habe ich bereits am 3.7.17 bemerkt: Permanent DNS-Anfragen an download.qnap.com
QNap - NASe telefonieren ständig nach Hause
- GeneralFailure
- Erledigt
-
-
In dem Screenshot aus dem verlinkten Thread sieht das so aus, als ob du das Blacklisten könntest?!?!
-
In dem Screenshot aus dem verlinkten Thread sieht das so aus, als ob du das Blacklisten könntest?!?!
Ja, ich könnte die DNS-Anfrage blockieren - dann würde die Anfrage vom NAS auf 127.0.0.1 rauskommen und nicht mehr bei QNAP.
Bringt mir aber insofern nix als dass das NAS es immer noch JEDE VERF... MINUTE versucht aufzulösen.
-
Dabei wäre es so einfach, die Verfügbarkeit des Web aus dem DNS des Routers abzufragen...
-
Also Doc ganz ehrlich, du hast hier bisher wohl wirklich sehr kompetente Beiträge geleistet, und auch hier hast du mit deiner Feststellung nicht Unrecht, aber trotzdem ist deine Reaktion völlig übertrieben.
Leuten die nicht wirklich verstehen worum es hier geteerten völlig übertrieben verängstigt.
Welche „Daten“ genau von dir gibt den das Wort „Ok“ in Zusammenhang mit einer sich ändernden IP Adresse preis?
Ich finde das echt völlig übertrieben.
Wenn du so eine Panik schiebst musst du das Internet aufgeben.
Jeder Aufruf einer Internetseite mittels eines Browsers hinterlässt mehr Daten von dir. -
Hallo Barry, das ist mir alles klar. Es geht dabei um grundsätzliches: so was sollte nur mit Wissen und Zustimmung der User passieren.
Viele Leute kaufen sich ein NAS, um ihre Daten nicht mehr bei Google & Co. zu lagern. Natürlich trackt QNAP mehr als nur das "ok". Jedes NAS hat seine ID und mehr. Schau dir mal die faktisch nicht vorhandene Datenschutzerklärung u.a. bei myQNAPcloud etc. an - nicht lustig.
Ganz einfach: wenn ich würde, entscheide ich. Ich will nicht, das QNAP ungefragt was auch immer macht. Und das dann noch alle 20 Sekunden laut den Beiträgen hier! Was machen die NASse denn sonst noch so? Seit QTS 4.3.3.0299 gehen meine NASse nicht mehr in den Ruhezustand, kein Wunder bei solchen Sachen!
Das Prinzip des Datenschutzes ist da ganz einfach & konsequent. Und QNAP hat sich, wenn sie Geräte in Europa oder Deutschland verkaufen, an Recht und Gesetz zu halten.
Welche „Daten“ genau von dir gibt den das Wort „Ok“ in Zusammenhang mit einer sich ändernden IP Adresse preis?
Als da mindestens wären: die IP-Adresse, die ID meines NAS, und eben wahrscheinlich X Daten mehr.
GENAU DARUM geht es. Es gibt keine Info, WAS für WELCHEN Zweck WOHIN übertragen wird und BEI WEM dann WIE LANGE und WO gespeichert wird.
ALLEINE die Tatsache, dass überhaupt Daten ungefragt übertragen werden, ist genau die Verletzung des Datenschutzes, um die es geht.
Ich weise dann nur noch auf die jüngsten Urteile zur Personenbeziehbarkeit einer IP-Adresse hin.
Und noch eins: der Hinweis, dass man dann ja das Internet nicht nutzen solle, ist arg profan.
Oder gibst du auch deine Bildrechte auf, wenn sich jemand trotz anderslautender Gesetze an deinen Fotos bedient? Und Nein, das ist jetzt sehr wohl vergleichbar.
-
Schwieriges Thema. Zum einen brauche ich es nun wirklich auch nicht, dass Geräte ungefragt sich mit irgendwelchen Servern verbinden. Zum anderen sehe ich hier in diesem speziellen Fall keine all zu große Gefahr, weil oder vor allem andere Hersteller dies auch oder so ähnlich machen und man sich hier nicht allem erwehren kann. Natürlich würde man sich hier wünschen, dass es QNAP besser als die anderen macht. Aber ich stelle mir hier gerade vor, wie Doc HT dies vorschlägt, dass von Seiten QNAP - z.B. per Datenschutzbestimmung - darauf hingewiesen wird, was QNAP alles im Hintergrund verarbeitet. Wer würde dies lesen? Mal Hand aufs Herz: Wer von Euch hat schon mal eine AGB oder Datenschutzbestimmung komplett durchgelesen? Also ich nicht. Habe nicht die Zeit ein 100 seitiges Dokument durchzulesen. Und selbst wenn, wer versteht denn diese auch noch. Die einen verstehen den technischen Teil nicht, die anderen den regulatorischen Teil nicht, die meisten aber wohl beides nicht. Also könnte man es genauso gut weglassen.
-
Ichvwürde es verstehen, wenn ich entsprechende Webdienste benutzen würde. Genau das tue ich nicht. Und QNAP informiert zu diesen Fragen genau NULL. Das ist und bleibt das Problem.
-
worin genau stimmst Du mit mir nicht überein?
Gerne gebe ich dir dazu eine Antwort. Ich stimme nicht mit dir überein, wie du in der Diskussion durch Vergleiche zu relativieren versuchst.
Bei dir liest sich das so:
Ich (Mavalok2) kann verstehen, dass du (Doc HT) deine Datenschutzrechte durch QNAP missbraucht siehst. Aber andere wie MS, Google, WA und Co. machen das doch auch...
Eine ähnliche Relativierung hatten wir schon mal bezüglich der Qualität der Firmware:
Ich (....) kann verstehen, dass du dich über die Fehler in der Firmware ärgerst. Aber andere Hersteller von Betriebssystemen machen auch Fehler ...
Mit dieser Einstellung wird man weder in Datenschutzangelegenheiten, noch in Fragen zur Stabilität der Firmware positive Fortschritte erreichen. Deine Argumentation hat noch einen entscheidenen anderen Haken: Wie die Privatsphäre durch die von dir genannten großen Übeltäter unterwandert wird, ist in der Regel bekannt. Jeder Nutzer etwaiger Dienstleistungen kann sich nämlich durch einfache Recherche im Internet einen Überblick verschaffen. Für die Nas-Hersteller hat sich die IT-Öffentlichkeit bisher noch nicht interessiert. Berichte über die Datenschutzeigenschaften von Nas-Firmware haben ich noch keine gelesen.
Der NAS-Markt war bis vor einiger Zeit noch eine Nischensparte und expandiert erst in letzten Jahren zunehmend. Dass die NAS-Hersteller in die Versuchung kommen, über Firmware-"Eigenschaften" Nutzerverhalten zu Marktanalysezwecke zu erheben, wäre doch verständlich. Vor Jahren hatte mal ein User festgestellt, dass die Firmware die Icons der installierten Qpkgs/Apps vom heimischen QNAP-Server unter bestimmten Umständen nachlud. Sicherlich wird man für diese Vorgehensweise immer ein gutes Argument finden, warum man das so gemacht hat. Nebenbei erhielt man aber auch eine Übersicht über das Nutzerverhalten zu den Apps.
Das aktuelle Thema möchte ich bezüglich des Datenschutzes nicht beurteilen. Ich bin auch nicht grundsätzlich gegen Vergleiche. Mein Ansatz wäre aber dieser: Wenn die großen Hersteller von Software/Firmware/Betriebssystemen Gelegenheiten nutzen um sich ein Bild über das Userverhalten zu schaffen, würde ich die kleineren Hersteller (wie die der Nas-Systeme) davon nicht freisprechen. Im Gegensatz du den großen, guckt denen nur noch keiner richtig auf die Finger.
-
Ich muss zugeben, auf diese Weise habe ich dies noch nie betrachtet und muss Dir dahingehend recht geben. Allerdings wird häufig über Probleme der QNAP-NASen diskutiert, als ob nur QNAP solche Probleme hätte und alle anderen Hersteller nicht - wie diese Datenschutzprobleme.
-
Es freut mich, wenn ich die Diskussion mit einer anderen Sichweise erweitern konnte und danke für deine offene Antwort.
-
Ich muss zugeben, auf diese Weise habe ich dies noch nie betrachtet und muss Dir dahingehend recht geben. Allerdings wird häufig über Probleme der QNAP-NASen diskutiert, als ob nur QNAP solche Probleme hätte und alle anderen Hersteller nicht - wie diese Datenschutzprobleme.
Ähem... das liegt vielleicht daran, dass wir hier im QNAP-Club sind?
Wie dem auch sei: es läge an QNAP, etwas zur Funktionsweise seiner NASse zu erklären...
-
Bissl gucken und suchen und es ist halb so wild
. Ja es darf gerne irgendwo dokumentiert werden aber lesen bzw. verstehen wird es eh kaum jemand. Siehe dazu weiter unten, wo was liegt und was darin wirklich steht./var/cache/netmgr/detect_defaultgw_internet.sh
/mnt/ext/opt/netmgr/api/core/gsd.py
Python: gsd.py""" Gateway Service Daemon (GSD) Created by Misora Hsu, Sep.20, 2016 Description: We have two ways to use this program. Usage: /your/env/python gsd.py -> Daemon Mode /your/env/python gsd.py calle -> Callee Mode 1. Callee Mode: Call once and do once 2. Daemon Mode: A daemon which periodically update Internet connection status to decide the default gateway. (v1.4.0+) Edit Log: Misora 2016-11-15 Implement callee mode Ben 2017-03-14 Revise policy: check only in auto mode, also trigger only if gateway needs to change."""import timeimport sysimport osfrom ctypes import *import subprocessimport shleximport checkInternetdef load_libc(): if sys.maxsize > 2**32: # this is a 64bit enviroment return CDLL("/lib64/libc.so.6")am return CDLL("/lib64/libc.so.6") else: return CDLL("/lib/libc.so.6")def getcfg(filenam, sect, field): return subprocess.Popen(shlex.split('/sbin/getcfg -f ' + filenam + ' "' + sect + '" "' + field + '"'), stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0].split("\n")[0]def main(dMode=True): while True: GW = getcfg('/etc/config/uLinux.conf', 'Network', 'Default GW Device') policy = getcfg('/etc/config/uLinux.conf', 'Network', 'Auto GW Mode') _libc.system('/mnt/ext/opt/Python/bin/python /mnt/ext/opt/netmgr/api/core/shttpc.py ' + GW + ' 25 &>/dev/null &') if policy != 'fixed': ret = getcfg('/tmp/internet_conn', 'internet', GW).strip() if GW: if ret == "False": _libc.system('/etc/init.d/network.sh check_default_gw &>/dev/null &') else: print 'No gateway, cehcking...' checker = checkInternet.checkInternet() checker.checkAll(2, True) for interface in checker.ifList: ret = getcfg('/tmp/internet_conn', 'internet', interface.split(": ")[1]).strip() if ret == "True": _libc.system('/etc/init.d/network.sh check_default_gw &>/dev/null &') break else: print 'No reachable found, give up.' # Daemon mode waits 30s here if dMode: _wait(30) # Callee mode only does once, so break infinite loop here if not dMode: break # end whiledef _wait(s): ''' Misora Hsu, Nov.15, 2016 This function makes a 30s waiting time. You can use any method to achieve it. However time.sleep() is not a ideal solution because the sleep() function may be broke by some issues. Hence here suggest use other method such as comparing the uptime diff. We decide to callee mode begins from QTS 4.3.0v3 so you are no need to refine it now. If we decide to roll back to daemon mode in the future, you should implement a sleep() alternative. ''' time.sleep(s)_libc = load_libc()if __name__ == "__main__": if len(sys.argv) > 1 and sys.argv[1] == "callee": print "GSD is working in callee mode." main(False) else: print "GSD is working in daemon mode." main(True)
Noch etwas mehr ...
Zitat von shttpc.pyDescription:
Try to get a file by socket() system call with specific interface. (ex: eth0)
Connect to remote HTTP server and send out a HTTP request, then wait for its response.
Parse the "Content-length" if recieved HTTP response header, compare the value with the expected one.
Return True if get the correct length.
Also save the results in /tmp/internet_connPython
Alles anzeigen''' Misora Hsu (#13677), Jan. 4, 2016 Simple HTTP Client (shttpc.py) Description: Try to get a file by socket() system call with specific interface. (ex: eth0) Connect to remote HTTP server and send out a HTTP request, then wait for its response. Parse the "Content-length" if recieved HTTP response header, compare the value with the expected one. Return True if get the correct length. Also save the results in /tmp/internet_conn Edit log: Misora Hsu 2016/06/06 Modify Resolve dns before generate connection Misora Hsu 2016/11/15 Modify Implement Redmine ticket #10327. Implement "Shell Exec" alternative by libc Ben 2017/05/02 Modify Add new policy for bug #100620 ''' import socket import signal import threading import httplib import sys import os import time from ctypes import * import subprocess import shlex from functions import CommonFunction sys.path.append('/mnt/ext/opt/netmgr/api/lib') if '/mnt/ext/opt/netmgr/api/lib' not in sys.path else None from netaddr import IPNetwork class MAPI_shttpc: #serv_addr = "www.qnap.com" #serv_addr = "104.107.56.59" # Redmine #10327: Change the server from www.qnap.com to download.qnap.com serv_addr = "download.qnap.com" serv_port = 80 sensor_file = "nas/det/sensor{d}.txt" ulinux_conf = '/etc/config/uLinux.conf' vswitch_conf = '/etc/config/vswitch.conf' ### the following section isn't used in current version http_hdr = "\ GET /_sensor.txt HTTP/1.1\r\n\ Host: www.qnap.com\r\n\ Connection: keep-alive\r\n\ Cache-Control: max-age=0\r\n\ Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n\ Upgrade-Insecure-Requests: 1\r\n\ User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36\r\n\ Accept-Encoding: gzip, deflate, sdch\r\n\r\n" #expected_content_len = 415 expected_content_len = 2 ### the above section isn't used in current version timeout = 5 ifName = "" result_file = "/tmp/internet_conn" def __init__(self, ifName, timeout=5): self.ifName = ifName self.timeout = timeout self.func = CommonFunction() socket.setdefaulttimeout(timeout) #print "timeout duration is: ",self.timeout ''' ---------------------------------- Important ---------------------------------- Here overwrite socket.socket() method to allow binding a specific interface to a the sockfd Besides, force appending a parameter "bound_ifName" into socket class for setsockopt use. ''' socket.bound_ifName = ifName socket.socket = bound_socket ''' Misora Hsu, Jan.14, 2016 Use raw socket methods to handle HTTP hehavior ''' def test_raw(self): #print "[",self.ifName,"] starting test ..." try: # create socket, SOCK_STREAM: TCP | SOCK_DGRAM: UDP sockfd = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # specify interface, SO_BINDTODEVICE = 25 sockfd.setsockopt(socket.SOL_SOCKET, 25, self.ifName) # !!!important!!! must setup timeout otherwise it will keep in infinite loop sockfd.settimeout(self.timeout) except socket.error as msg: print "[",self.ifName,"]",msg return self.setResult(self.ifName, False) serv_addr = (self.serv_addr, self.serv_port) try: # connect to remote sockfd.connect(serv_addr) except socket.error as msg: sockfd.close() print "[",self.ifName,"]",msg return self.setResult(self.ifName, False) # send HTTP request try: sockfd.sendall(self.http_hdr) except socket.error as msg: sockfd.close() print "[",self.ifName,"]",msg return self.setResult(self.ifName, False) recv_len = 0 data = "" # wait for HTTP response, recv 4066 bytes once (2016/03/10) try: data += sockfd.recv(4096) recv_len += len(data) #print data except socket.error as msg: sockfd.close() print "[",self.ifName,"]",msg return self.setResult(self.ifName, False) if len(data) <= 0: return self.setResult(self.ifName, False) # find end-of-HTTPheader symbol "\r\n\r\n" if "\r\n\r\n" in data: http_hdr_list = data.split("\r\n\r\n")[0] http_hdr_itemA = http_hdr_list.split("\r\n") for i in range(len(http_hdr_itemA)): #print http_hdr_itemA[i] if "Content-Length: " in http_hdr_itemA[i]: content_len = int(http_hdr_itemA[i].split(": ")[1].replace("\r\n", "")) #print content_len if content_len == self.expected_content_len: sockfd.close() #print "^_^" return self.setResult(self.ifName, True) else: sockfd.close() #print ">_<" return self.setResult(self.ifName, False) else: sockfd.close() return self.setResult(self.ifName, False) return self.setResult(self.ifName, False) ''' Misora Hsu, Mar.17, 2016 Use httplib library to handle HTTP behavior ''' def testByHTTPConn(self): # Misora, 2016-06-06: Resolve dns before generate connection try: sIP = socket.gethostbyname(self.serv_addr) except socket.error as msg: print "[",self.ifName,"]",msg return self.setResult(self.ifName, False) #conn = httplib.HTTPConnection(self.serv_addr, source_address=(bind_if_ip, 0), timeout=self.timeout) #conn = httplib.HTTPConnection(self.serv_addr, timeout=self.timeout) conn = httplib.HTTPConnection(sIP, timeout=self.timeout) headers = {"Host": "www.qnap.com"} try: conn.request("GET", "/_sensor.txt", "", headers) except socket.error as msg: print "[",self.ifName,"]",msg conn.close() return self.setResult(self.ifName, False) try: rsp = conn.getresponse() except socket.error as msg: print "[",self.ifName,"]",msg conn.close() return self.setResult(self.ifName, False) print "[",self.ifName,"]",rsp.status conn.close() if rsp.status == 200 and int(rsp.getheader("Content-Length", 0)) == self.expected_content_len: return self.setResult(self.ifName, True) else: return self.setResult(self.ifName, False) ''' Misora Hsu, Oct.14, 2016 Use curl --dns-interface --interface for DNS querying and check Internet connection. ''' def test(self): ifs = self.getIfList() if not self.ifName in ifs: print self.ifName,"isn't existed" # Remove log if the interface was not existed, then return self.removeConfig(self.ifName) return False # Misora, 2016-10-14: curl --dns-interface needs many libries which doesn't exist on NAS # so we prepare in nvs's folder. lib_path = "/mnt/ext/opt/netmgr/util/curl-ares/" ''' Misora Hsu, Nov.15, 2016 According to Redmine #10327. Seperate the sensor file to 16 files and GET which according to the loweset byte of MAC address. That is, download.qnap.com/nas/det/sensor0.txt download.qnap.com/nas/det/sensor1.txt ... download.qnap.com/nas/det/sensorE.txt download.qnap.com/nas/det/sensorF.txt ''' sensor_path = self.serv_addr + "/" + self.sensor_file #mac_addr = self.sh2("ifconfig "+self.ifName+" | head -n 1 | awk '{print $5}'").replace(' ', '').replace('\n', '') mac_addr = self.sh("/mnt/ext/opt/netmgr/util/get_mac_addr.sh "+self.ifName)[0].replace(' ', '').replace('\n', '') mac_byte = mac_addr[-1] sensor_path = sensor_path.replace("{d}", mac_byte) #print "MAC:",mac_addr #print "Path:",sensor_path # Ben: Add dns info if dhcpc server has provided. dns_type = self.func.getcfg_lite(self.ulinux_conf, 'Network', 'DNS type').strip() dhcpc_info = '/etc/dhcpc/dhcpcd-{}.info'.format(self.ifName) dns_info = '' ip_type = 'dhcp' ip = '' mask = '' gateway = '' valid_gateway = False if self.ifName.startswith('eth') or self.ifName.startswith('bond'): ip_type = self.func.getcfg_lite(self.ulinux_conf, self.ifName, 'Usage').strip().lower() # not configured, default is dhcp ip_type = 'dhcp' if not ip_type else ip_type ip = self.func.getcfg_lite(self.ulinux_conf, self.ifName, 'IP Address').strip() mask = self.func.getcfg_lite(self.ulinux_conf, self.ifName, 'Subnet Mask').strip() gateway = self.func.getcfg_lite(self.ulinux_conf, self.ifName, 'Gateway').strip() elif self.ifName.startswith('wlan'): # if wireless section not exist then use wlan0, a bug from QTS(they'll write same) name = 'wireless' if self.func.getcfg_lite(self.ulinux_conf, 'wireless', 'ip').strip() else 'wlan0' ip = self.func.getcfg_lite(self.ulinux_conf, name, 'ip').strip() # not configured, default is dhcp ip_type = self.func.getcfg_lite(self.ulinux_conf, name, 'Usage').strip().lower() ip_type = 'dhcp' if self.func.getcfg_lite(self.ulinux_conf, self.ifName, 'Configure').strip().lower() != 'true' else ip_type mask = self.func.getcfg_lite(self.ulinux_conf, name, 'netmask').strip() gateway = self.func.getcfg_lite(self.ulinux_conf, name, 'gateway').strip() else: # not in uLinux, find in vswitch conf if self.func.getcfg_lite(self.vswitch_conf, self.ifName, 'device_type'): ip_type = self.func.getcfg_lite(self.vswitch_conf, self.ifName, 'ip4_type').strip().lower() ip = self.func.getcfg_lite(self.vswitch_conf, self.ifName, 'ip').strip() mask = self.func.getcfg_lite(self.vswitch_conf, self.ifName, 'subnet_mask').strip() gateway = self.func.getcfg_lite(self.vswitch_conf, self.ifName, 'default_gateway').strip() else: # device not found anywhere, let it be tested valid_gateway = True if ip_type == 'dhcp' and os.path.isfile(dhcpc_info): valid_gateway = True # We assume DHCP is right with open(dhcpc_info, 'r') as fd: for line in fd.readlines(): if line.startswith('DNS'): dns_info = line.split('=')[-1].strip() break else: # check gateway is valid (in same Network) if ip and mask and gateway: try: if gateway in IPNetwork(ip + '/' + mask): valid_gateway = True except e: pass # not valid gateway # print ip, '-', mask, '-', gateway, '-', valid_gateway if valid_gateway: if dns_type == 'auto' and dns_info: cmd = 'export LD_LIBRARY_PATH={} && curl --dns-interface {} --interface {} --connect-timeout {} --dns-servers {} "{}" 2>/dev/null'.format(lib_path, self.ifName, self.ifName, str(self.timeout), dns_info, sensor_path) else: cmd = 'export LD_LIBRARY_PATH={} && curl --dns-interface {} --interface {} --connect-timeout {} "{}" 2>/dev/null'.format(lib_path, self.ifName, self.ifName, str(self.timeout), sensor_path) ret = self.func.libc.system(cmd) else: ret = 1 # user not having a workable gateway if ret == 0: return self.setResult(self.ifName, True) else: return self.setResult(self.ifName, False) def sh(self, cmd): return subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() ''' Misora Hsu, Nov.15, 2016 A "Shell Exec" alternative which is implemented by libc instead of the subprocess library of Python ''' def sh2(self, cmd=""): ret = "" MAX_BUF_SIZE = 4096 buf = c_char_p(self.func.libc.malloc(MAX_BUF_SIZE)) fp = self.func.libc.popen(cmd, 'r') while self.func.libc.fgets(buf, MAX_BUF_SIZE, fp) > 0: ret += buf.value #print buf.value self.func.libc.pclose(fp) return ret def getIfList(self): return self.sh('/mnt/ext/opt/netmgr/util/list_if.sh')[0].replace('\n', '').split(' ') def setResult(self, ifName, status): if os.path.isfile(self.result_file) == False: self.func.libc.system('/bin/touch '+self.result_file) self.func.libc.system('/sbin/setcfg -f '+self.result_file+' internet '+ifName+' '+str(status)) self.setUpdateTime(ifName) return status def removeConfig(self, ifName): self.sh('/sbin/qcfg -s update_time "'+ifName+'" -f /tmp/internet_conn -e') self.sh('/sbin/qcfg -s internet "'+ifName+'" -f /tmp/internet_conn -e') def setUpdateTime(self, ifName): self.func.libc.system('/sbin/setcfg -f '+self.result_file+' update_time '+ifName+' "'+str(getBootTime())+'"') def getBootTime(): with open('/proc/uptime', 'r') as f: uptime_seconds = float(f.readline().split()[0]) return uptime_seconds ''' Misora Hsu, Mar.17, 2016 Overwrite socket() method Allow binding a specfic interface before return the socket file descriptor ''' true_socket = socket.socket def bound_socket(*a, **k): sock = true_socket(*a, **k) sock.setsockopt(socket.SOL_SOCKET, 25, socket.bound_ifName) #print socket.bound_ifName return sock # def guardian(): # print signal.signal(signal.SIGALRM, handler) # print signal.alarm(3) # def handler(signum, frame): # print "TTTout" # sys.exit(-1) def testing_thread(*args): ifName = args[0] timeout = args[1] tmp = MAPI_shttpc(ifName, timeout=timeout) ret = tmp.test() if ret == True: os._exit(0) else: os._exit(-1) def force_exit(ifName): print "Invoke force exiting process..." if sys.maxsize > 2**32: #this is a 64bit enviroment libc = CDLL("/lib64/libc.so.6") else: libc = CDLL("/lib/libc.so.6") result_file = "/tmp/internet_conn" if os.path.isfile(result_file) == False: libc.system('/bin/touch '+result_file) libc.system('/sbin/setcfg -f '+result_file+' internet '+ifName+' False') libc.system('/sbin/setcfg -f '+result_file+' update_time '+ifName+' "'+str(getBootTime())+'"') def main(argv): if len(sys.argv) > 2: timeout=int(sys.argv[2]) else: timeout=5 thd = threading.Thread(target=testing_thread, args=(argv[0],timeout,)) thd.start() # print signal.signal(signal.SIGALRM, handler) # print signal.alarm(3) # thd.join() time.sleep(timeout) force_exit(argv[0]) os._exit(-1) if __name__ == "__main__": main(sys.argv[1:])
-
OK. Ähm, ja. Hmm. Kann man dies auch auf deutsch haben? Mein Python ist ein wenig eingerostet.
-
Ja es darf gerne irgendwo dokumentiert werden aber lesen bzw. verstehen wird es eh kaum jemand.
@christian aber genau darum geht es doch: Information und Aufklärung durch QNAP, und zwar in einer für den normalen Anwender wie mich verständlichen Form.
Wozu brauche ich locker 400 Zeilen Code für eine solche Funktion? Ich kann dem Code (ist der vollständig?) auch nicht entnehmen, was da genau gemacht wird.
Ich lese an einer Stelle nur einen Kommentar, dass durch diesen Frickelcode der Sleep-Mode gestört werden kann.
Wenn das so ist: Danke, QNAP, für den Einbau einer Quelle dauernden Ärgers!
Wie auch immer. Schlecht gemacht von QNAP. Leider.
-
Information und Aufklärung durch QNAP, und zwar in einer für den normalen Anwender wie mich verständlichen Form.
Aufklärung ja, aber nicht im Teletubbies Format. Woher kommt dieser Anspruch?
Wozu brauche ich locker 400 Zeilen Code für eine solche Funktion?
Du hast QNAP doch sicherlich schon kontaktiert, vllt schreiben Sie dir ja eine ausführliche Antwort und Kurt hat bereits darauf geantwortet
(ist der vollständig?)
ja. Deshalb oben die Links, du kannst ja mal nachschauen.
Frickelcode
Du verstehst den Code nicht, nennst es aber Frickelcode . Wie kommt das?
Offtopic: Ich sehe in deinem Profil, dass du Win10 nutzt. Hast du da auch bei Windows angefragt, warum die nach Hause telefonieren? Was war die Antwort? http://www.zeit.de/digital/dat…instellungen-deaktivieren Stand das irgendwo bei der Installation, wenn nicht ... warum nicht? Weil es nicht sein muss oder doch? Wo steht das sowas "angezeigt" werden muss? Ich möchte es gern verstehen und dann am kommenden Woche gern mit QNAP diskutieren. Dafür brauche ich aber handfeste Richtlinien, Links und Textpassagen die das bisher beschrieben zu 100% untersagen.
Grüße
Christian -
Offtopic: Ich sehe in deinem Profil, dass du Win10 nutzt. Hast du da auch bei Windows angefragt, warum die nach Hause telefonieren? Was war die Antwort? zeit.de/digital/datenschutz/20…instellungen-deaktivieren
Der Clubchef kann es nicht lassen. Da bin ich wirklich froh, dass du mich verstanden hast, @Mavalok2.
-
Für die Fehler im Umgang mit dem Datenschutz in Bezug auf seine Produkte ist QNAP verantwortlich.
Diverse User dürften nicht wissen, was sie für Probleme haben, wenn sie Personenbezogene Daten über Dienste von QNAP verarbeiten, ohne den Datenschutz klar zu haben.
Die Frage an QNAP ist: Wo ist die Datenschutzerklärung für die Produkte?
Ich beende die Diskussion hier jetzt, da es jetzt persönlich und zu spitz wird. Wie ich mit Windows umgehe, habe ich beschrieben. Warum ich ein sicheres NAS möchte, auch.
/off
-
Jetzt zu schmollen bringt wenig bis gar nichts. Schade, aber meine Fragen wurden leider nicht alle beantwortet, dennoch gebe ich zumindest diese eine Frage am kommenden Wochenende so weiter.
-
Man sieht hier ganz gut, dass Datenschutz auch eine ganz persönliche Note hat und das Empfinden diesbezüglich sehr unterschiedlich ist. Nicht jeder erachtet den Datenschutz für gleich wichtig, und sieht auch unterschiedliche Dinge für wichtiger oder weniger wichtig oder gar irrelevant an. Anders lässt sich auch garnicht erklären, dass gewisse Leute ihre persönlichsten und intimsten "Daten" mit voller Absicht und ohne Gedanken frei zugänglich für alle ins Netzstellen stellen. Wenn man dies tut, muss man sich auch keine Gedanken über ein paar Verbindungsdaten machen.
Wer allerdings im Netz auf absoluten Datenschutz besteht, aber jeden Wettbewerb und Fragebogen aller Hersteller mit Freuden ausfüllt, weil es einen Kaugummi zu gewinnen gibt, der wird auch noch so seine Überraschung erleben. Dennoch bleibt der Idealfall so, dass jeder Einzelne bestimmen kann, wie, wo und was seiner persönlichen Daten preis gegeben wird. Dass es hier noch an vielen Stellen dringenden Nachholbedarf gibt, zeigt dieser Betrag ganz gut. Hier sind nun die Hersteller - alle Hersteller - gefragt ihre Hausaufgaben komplett zu machen. Es bringt jedoch nichts bis dahin in Panik zu verfallen. Wie meine verstorbene Großmutter schon zu sagen pflegte: "Zu Tode gefürchtet ist auch gestorben".