Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

UDP Portscan per PHP

Frage Entwicklung PHP

Mitglied: bloedername

bloedername (Level 1) - Jetzt verbinden

26.06.2014 um 09:44 Uhr, 2164 Aufrufe, 12 Kommentare

Hallo zusammen,

ich möchte mittels PHP prüfen, ob eine Webcam eingeschaltet ist oder nicht. Um genauer zu sagen muss ich eigentlich nur überprüfen ob ein bestimmter Port offen ist oder halt geschlossen.

Das Problem ist, dass es sich um eine iOS Webcam App handelt, wo man keinerlei Konfiguration vornehmen kann und evtl. das Protokoll von UDP auf TCP angeben kann.

Daher funktionieren die einfachen Portscan-Funktionen von PHP mittels fsockopen etc allesamt leider nicht.

Mittels Apple's Airport Dienstprogramm sowie unter den Porteinstellungen in der Netzwerkumgebung unter Windows XP habe ich zwar unter der Portweiterleitung nur TCP Ports angegeben (bzw. bei XP den Port benannt und nur TCP ausgewählt) aber es scheint sich um einen UDP Port handeln zu müssen. Auch hatte ich schon extra nur nach reinen TCP Ports gesucht und lediglich den Port 80 (http) gefunden, der sich ja leider nicht eignet, da ich plane mehrere Webcams aufzustellen und über die jeweilige DYNDNS:Portangabe zu erreichen. Einzig hier hat die fsockopen-Funktion ein richtiges Ergebnis angezeigt.

Lediglich dort funktionierte die fsockopen-Funktion von PHP aber ist wie gesagt für meine Zwecke ja leider nicht förderlich, zumal den http Port 80 zudem zu belegen, sowieso keine gute Idee sein dürfte, oder täusche ich mich da? Denn normalerweise sind doch die User-Ports von 1024-49151 für solche Anwendungen zu verwenden, wenn ich mich recht entsinne.

Über online Portscanner wie z.B. http://www.mynetworktest.com/ports.php funktioniert ein Scan tadellos, also bei einschalten der App wird auch richtig angezeigt, dass der jeweilige Port offen ist. Da die Dateiendung eine PHP-Datei ist, muss es ja doch irgendwie funktionieren mit PHP.

Für Hilfestellungen wäre ich sehr dankbar.

Mit besten Grüßen
Mitglied: colinardo
26.06.2014, aktualisiert um 11:12 Uhr
Moin,
Lediglich dort funktionierte die fsockopen-Funktion von PHP aber ist wie gesagt für meine Zwecke ja leider nicht förderlich, zumal den http Port 80 zudem zu belegen, sowieso keine gute Idee sein dürfte, oder täusche ich mich da? Denn normalerweise sind doch die User-Ports von 1024-49151 für solche Anwendungen zu verwenden, wenn ich mich recht entsinne.
Portumleitung ist hier das Stichwort ..., Ansonsten besser ein VPN zu deinem Netz aufbauen, so wirken sich eventuell entdeckte Sicherheitslücken deiner Cams nicht direkt negativ aus. Wenn die Cam nur auf Port 80 reagiert wird sie vermutlich nur darüber angesprochen; das kannst du aber ganz schnell mit Wireshark herausfinden, wie und worüber die CAM kommuniziert!
By the way wenns trotzdem noch benötigt wird, eine funktionierenden PHP UDP Portscanner Klasse findest du hier: https://github.com/jperkins/PHP-Portscanners/blob/master/udpPortScanner. ...

Grüße Uwe
Bitte warten ..
Mitglied: aqui
26.06.2014 um 11:11 Uhr
den Port 80 (http) gefunden, der sich ja leider nicht eignet, da ich plane mehrere Webcams aufzustellen und über die jeweilige DYNDNS:Portangabe zu erreichen
Auch das würde gehen wenn du am Router oder Firewall mit Port Translation arbeitest !
TCP 8081 in --> Lokale IP Kamera 1 TCP 80 out
TCP 8082 in --> Lokale IP Kamera 2 TCP 80 out
TCP 8083 in --> Lokale IP Kamera 3 TCP 80 out
usw.
Hat auch noch den Vorteil das du so wenigstens etwas deine Videodaten verscheierst und mit TCP 80 nicht gleich in den ersten Sekunden jedem Port Scanner in die Hände fällst.
Wenn du mit den Videodaten nicht gerade Oma Grete beim Stricken überwachen willst sondern sensitives Video überträgt kann man dir nur dringenst ans Herz legen den Rat vom Kollegen colinardo zu beachten und ein VPN zu nutzen, was heutzutage mit 3 Mausklicks auf (fast) jedem Router installiert ist.
Dadurch gehst du nicht nur deiner ganzen Port Forwarding oder Translation Frickelei aus dem Weg sondern verschlüsselst auch noch deine Video Daten das das nicht JEDER im Internet das alles mitlesen und ansehen kann !!
Bitte warten ..
Mitglied: bloedername
26.06.2014, aktualisiert um 11:40 Uhr
Hallo Uwe,

vielen Dank für deine Antwort. Auf diese Klasse bin ich auch schon gestoßen und habe aber keinen Erfolg damit.

Das Script scheint nicht zu funktionieren. Hier mal mein Code, wie ich es eingebunden habe:

01.
<?php 
02.
error_reporting(E_ALL); 
03.
function get_ip() { 
04.
	$ip = ''; 
05.
	if (isset($_SERVER['HTTP_CLIENT_IP'])) 
06.
		$ip = $_SERVER['HTTP_CLIENT_IP']; 
07.
	else if($_SERVER['HTTP_X_FORWARDED_FOR']) 
08.
		$ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 
09.
	else if($_SERVER['HTTP_X_FORWARDED']) 
10.
		$ip = $_SERVER['HTTP_X_FORWARDED']; 
11.
	else if($_SERVER['HTTP_FORWARDED_FOR']) 
12.
		$ip = $_SERVER['HTTP_FORWARDED_FOR']; 
13.
	else if($_SERVER['HTTP_FORWARDED']) 
14.
		$ip = $_SERVER['HTTP_FORWARDED']; 
15.
	else if($_SERVER['REMOTE_ADDR']) 
16.
		$ip = $_SERVER['REMOTE_ADDR']; 
17.
	else 
18.
		$ip = 'UNBEKANNT'; 
19.
	return $ip; 
20.
21.
 
22.
$rem_ip = get_ip(); 
23.
 
24.
$REMOTE_ADDR = $rem_ip; 
25.
 
26.
echo "REMOTE_ADDR: $REMOTE_ADDR"; 
27.
 
28.
include ('../udpPortScanner.inc'); 
29.
 
30.
$udpScanner = new udpPortScanner("$REMOTE_ADDR"); 
31.
$openPorts = $udpScanner-> scan(); 
32.
 
33.
if (count($openPorts) == 0) { 
34.
	echo "no open UDP ports detected.<br/>"; 
35.
} else { 
36.
	echo "open UDP ports:<br/>"; 
37.
 
38.
	foreach ($openPorts as $portNumber => $service) { 
39.
		echo "$portNumber ($service)<br/>"; 
40.
41.
42.
?>
Die Datei in der Zeile: include ('../udpPortScanner.inc'); enthält den Code gemäß dem Link.

Ich habe auch schon versucht: include ('udpPortScanner.php'); sowie include_once. Die Funktion arbeitet er nicht ab. Er schreibt weder:
01.
echo "no open UDP ports detected.<br/>"; 
02.
} else { 
03.
	echo "open UDP ports:<br/>";
was er ja eigentlich müsste.

Besten Dank soweit erstmal
Bitte warten ..
Mitglied: colinardo
26.06.2014, aktualisiert um 11:26 Uhr
finde doch erst mal mit Wireshark raus auf welchen Ports die Cam überhaupt kommuniziert, dann hast du es schwarz auf weiß und musst nicht immer nur mutmaßen ...sondern kannst darauf deinen Test aufbauen.
und zur Funktion: Du solltest beim Aufruf auch die zu scannenden Ports mit übergeben, Standardmäßig sind das die Ports 1-1024.
siehe dazu den Constructor:
function __construct($hostIp, $startPort = 1, $endPort = 1024, $output = 1)
p.s. Code ohne Code-Tags: <code> Quellcode </code> schaue ich mir nicht mehr an ...
Bitte warten ..
Mitglied: bloedername
26.06.2014, aktualisiert um 12:37 Uhr
Hallo,

okay, ich habe jetzt mal Wireshark laufen lassen. Kenne mich damit noch nicht aus. Hier mal ein Auszug:

01.
37442	152.421607000	XX.64.XX.1X6	10.0.1.3	WebSocket	622	WebSocket Binary [FIN]  
02.
 
03.
37443	152.421623000	10.0.1.3	XX.64.XX.1X6	TCP	66	50634 > 81 [ACK] Seq=476 Ack=16361462 Win=130512 Len=0 TSval=174222904 TSecr=288657516
Wobei die feste IP der Cam die 10.0.1.8 ist und im Monitor gar nicht auftaucht, obwohl sie eingeschaltet ist.

Ich habe von außerhalb des Netzwerks eine externe Anfrage an die Cam starten lassen und dabei folgendes gesehen:

01.
84705	132.484934000	10.0.1.3	XX.64.XX.1X6	TCP	66	56589 > 50634 [ACK] Seq=1 Ack=48310261 Win=8164 Len=0 TSval=177085332 TSecr=291507408 
02.
84706	132.523393000	XX.64.XX.1X6	10.0.1.3	TCP	1514	[TCP segment of a reassembled PDU]
Daher schließe ich daraus, dass die IP 10.0.1.3 der bzw. die TimeCapsule ist, die das Portforwarding instruiert.

Beste Grüße
Bitte warten ..
Mitglied: bloedername
26.06.2014 um 12:34 Uhr
Heißt das im Umkehrschluss, dass die App den TCP Port 56589 benötigt? Ich habe jetzt eine öffentlichePortweiterleitung auf den 50634 eingerichtet bei privatem TCP Port 80.

Was das Thema VPN angeht, kann das Apple Airport Dienstprogramm bzw. die Hardware (Apple Timecapsule) kein VPN. Und einen VPN-Server laufen zu lassen kommt nicht in Frage.

Beste Grüße
Bitte warten ..
Mitglied: colinardo
26.06.2014, aktualisiert um 13:04 Uhr
Um den Traffic der CAM abzufangen musst du entweder am LAN-Port der CAM mit einem HUB den Traffic scannen, oder wenn es eine Wireless-CAM ist, mit einer WLAN Karte im Promiscous-Mode den Traffic aufzeichnen. Alternativ lässt sich das auch mit einem Proxy machen den dein Telefon im LAN nutzt, dann schnorchelt man an diesem den Traffic ab:
http://attentionshard.wordpress.com/2013/06/13/sniffing-ios-and-android ...

Grüße Uwe
Bitte warten ..
Mitglied: bloedername
26.06.2014 um 13:47 Uhr
Danke für den Hinweis. Ich habe es jetz mal soweit installiert und eingerichtet, werde jedoch trotzdem nicht schlau daraus.

01.
URL	https://XX.64.XX.1X6:50634 
02.
Status	Receiving response body... 
03.
Notes	SSL Proxying not enabled for this host: enable in Proxy Settings, SSL locations 
04.
Response Code	- 
05.
Protocol	HTTP/1.1 
06.
Method	CONNECT 
07.
Kept Alive	No 
08.
Content-Type	- 
09.
Client Address	/127.0.0.1 
10.
Remote Address	XX.64.XX.1X6/XX.64.XX.1X6
Bitte warten ..
Mitglied: colinardo
26.06.2014, aktualisiert um 14:13 Uhr
sagt doch eigentlich schon alles ...
Zugriff auf die Webcam via SSL auf Port 50634

also check mit PHP mal diesen Port via TCP (p.s. um welche Kamera sprechen wir hier überhaupt?)
Bitte warten ..
Mitglied: bloedername
26.06.2014, aktualisiert um 14:27 Uhr
Es handelt sich um ein iPad. Die dazugehörige App nennt sich Instant Webcam.

http://instant-webcam.com/

was ich nicht glaube ist, dass es ein ssl-zertifikat braucht, denn wenn ich die URL über den Browser aufrufe, erscheint kein HTTPS in der Adresse. Das verwundert mich. Außerdem ist in unter Notes angegeben, dass SSL nicht aktiviert ist, was mir ebenfalls komisch vorkommt. Ich habe zwar SSL auf dem iPad für Charles installiert und unter den Proxyeinstellungen die DNS Domain, bzw. meine IP samt Port hinterlegt, ändert aber rein gar nichts. Nun habe ich die SSL-Proxyeinstellungen gelöscht und auch das Zertifikat auf dem iPad bzw. das Profil gelöscht aber es kommt dasselbe bei raus.

Die Weiterleitung auf den Port 50634 ist ja eingerichtet, sodass die Cam über XX.64.XX.1X6:50634 erreichbar ist.

Wenn ich das über PHP mit folgendem Script laufen lasse:

01.
$url_src = gethostbyname('xxx.dyndns.org'); 
02.
 
03.
$ports = array(50634); 
04.
 
05.
foreach ($ports as $port) 
06.
07.
    $connection = @fsockopen($url_src, $port); 
08.
 
09.
    if (is_resource($connection)) 
10.
11.
        echo '<h2>' . $url_src . ':' . $port . ' ' . '(' . getservbyport($port, 'tcp') . ') is open.</h2>' . "\n"; 
12.
 
13.
        fclose($connection); 
14.
15.
 
16.
    else 
17.
18.
        echo '<h2>' . $url_src . ':' . $port . ' is not responding.</h2>' . "\n"; 
19.
20.
}
dann bekomme ich, dass der Port angeblich nicht antwortet, was ja offensichtlich nicht sein kann.
Bitte warten ..
Mitglied: colinardo
26.06.2014, aktualisiert um 17:07 Uhr
teste das bitte erst mal im LAN intern bevor du über den Router gehst.
für SSL im Zusammenhang mit "fsockopen" siehe: http://us2.php.net/manual/en/function.fsockopen.php#75388
Über SSL wird dann vermutlich nur die Authentifizierung laufen ... Leider kost die App was sonst würde ich das hier mal testen, aber so, viel Erfolg noch.

Grüße Uwe
Bitte warten ..
Mitglied: bloedername
26.06.2014 um 17:04 Uhr
Das ist neu... vor kurzem war die noch umsonst. Schade. Trotzdem vielen Dank.
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (17)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...