Remote-Tool über Internet, wie?

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

    Remote-Tool über Internet, wie?

    Hi!
    Ich habe ein Remote-Tool programmiert welches mit Manager(Chef) und Client(Empfänger) arbeitet hier die Codes:

    VB.NET-Quellcode

    1. Imports System.Net.Sockets
    2. Imports System.Threading
    3. Imports System.IO
    4. Public Class Form2
    5. Dim listener As New TcpListener(80)
    6. Dim client As TcpClient
    7. Dim message As String = ""
    8. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    9. listener.Stop()
    10. End Sub
    11. Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    12. Dim listthread As New Thread(New ThreadStart(AddressOf listening))
    13. listthread.Start()
    14. ListBox1.Items.Add("Anwendung starten")
    15. ListBox1.Items.Add("Nachricht senden")
    16. ListBox1.Items.Add("Windows herunterfahren")
    17. ListBox1.Items.Add("Windows herunterfahren abbrechen")
    18. ListBox1.Items.Add("Öffnet Pum 1.2")
    19. ListBox1.Items.Add("Blockieren")
    20. ListBox1.Items.Add("Blockierung aufheben")
    21. End Sub
    22. Private Sub listening()
    23. listener.Start()
    24. End Sub
    25. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    26. Dim nachricht As String
    27. Select Case ListBox1.SelectedIndex
    28. Case 0
    29. nachricht = "00" & TextBox2.Text
    30. Case 1
    31. nachricht = "01" & TextBox2.Text
    32. Case 2
    33. nachricht = "02"
    34. Case 3
    35. nachricht = "03"
    36. Case 4
    37. nachricht = "04"
    38. Case 5
    39. nachricht = "05"
    40. Case 6
    41. nachricht = "06"
    42. Case Else
    43. nachricht = ""
    44. End Select
    45. client = New TcpClient(TextBox1.Text, 80)
    46. Dim writer As New StreamWriter(client.GetStream)
    47. writer.Write(nachricht)
    48. TextBox2.Clear()
    49. writer.Flush()
    50. End Sub
    51. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    52. If listener.Pending = True Then
    53. message = ""
    54. client = listener.AcceptTcpClient()
    55. Dim reader As New StreamReader(client.GetStream())
    56. While reader.Peek > -1
    57. message = message + Convert.ToChar(reader.Read()).ToString
    58. End While
    59. empfangsmodul(message)
    60. Else : End If
    61. End Sub
    62. Private Sub empfangsmodul(ByVal message As String)
    63. Dim befehl As String, parameter As String
    64. befehl = Mid(message, 1, 2)
    65. parameter = Mid(message, 3)
    66. Select Case befehl
    67. Case "00"
    68. Shell(parameter)
    69. Case "01"
    70. MsgBox(parameter, MsgBoxStyle.Information, "Microsoft Update")
    71. Case "02"
    72. Shell("shutdown -s -t 60")
    73. Case "03"
    74. Shell("shutdown -a")
    75. MsgBox("Ihr Herunterfahren wurde abgebrochen", MsgBoxStyle.Information, "")
    76. Case "04"
    77. Form3.Show()
    78. Case "05"
    79. Timer4.Start()
    80. Case "06"
    81. Timer5.Start()
    82. Case Else
    83. End Select
    84. End Sub
    85. Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
    86. End Sub
    87. Private Sub GroupBox1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GroupBox1.Enter
    88. End Sub
    89. Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
    90. End Sub
    91. Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
    92. End Sub
    93. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    94. MsgBox("Mit Server Verbunden", MsgBoxStyle.Information, "Verbindung")
    95. End Sub
    96. Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
    97. End Sub
    98. Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick
    99. Form3.Show()
    100. End Sub
    101. Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick
    102. Form4.Show()
    103. End Sub
    104. Private Sub Timer5_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer5.Tick
    105. Form5.Show()
    106. End Sub
    107. End Class

    Das läuft aber nur übers Netzwerk und zwar über die Verbindungs Art TCP!
    Und jetzt mein Problem:
    Ich würde das auch gerne über die Öffentliche IP laufen lassen(die findet man raus unter: Öffentliche IP herausfinden
    Nur wie kann ich das noch in mein Programm einprogrammieren das es über die Öffentliche IP laüft? Könnt iht mir da helfen? :thumbsup:
    Grüße @TheForce:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TheForce“ ()

    Schau Dir mal die Überladungen des TCPListeners an. Der übernimmt auch nen IpEndPoint und dieser übernimmt eine IP-Adresse, an die er gebunden ist.

    VB.NET-Quellcode

    1. Dim listener As New TcpListener(New IPEndPoint(IPAddress.Any, 80))


    IpAddress.Any horcht auf allen Adressen. Nun im Router noch den Port freigeben und das sollte es gewesen sein.

    BTW: Es ist ne schlechte Idee, den Port 80 zu nutzen. 80 ist für WebServer vorgesehen.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Ahso, wenn man im Konstruktor nur den Port angibt, ist der Listener an alle verfügbaren Adressen gebunden? Wusst ich nicht.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    TheForce schrieb:

    VB.NET-Quellcode

    1. Form3.Show()
    2. ' ...
    3. Form4.Show()
    4. ' ...
    5. Form5.Show()
    gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    OK ich werde den Port ändern...
    Allerdings stellt euch vor ich ein Freund in Australien dem ich etwas über mein Tool an seinem PC erklären möchte. Dazu schicke ich ihm über E-Mail den Clienten. Er kennt sich jetzt aber nich gut mit Computern aus und weiß nicht wie er den Port im Router freigeben kann und wie er den Port den ich für mein Programm zu meinem PC weiterleitet weiß er auch nicht!
    Kann ich das auch ohne Router Einstellungen machen?
    Und wenn ja, kann ich in mein Programm mit Codes irgendwie integrieren das sich der Port den ich brauche sich automatisch freigibt?
    Bitte helft mit
    Grüße @TheForce :D
    PS: Aber danke das ihr mir so schnell geholfen habt!! :)
    Naja, eine Möglichkeit ist, wenn ein externer Server die Verbindung vermittelt. Siehe "TeamViewer". Dann sind beide Programme nur Clients, wo keine Portfreigabe in dem Sinn notwendig ist.

    Dann würd ich mal vorschlagen, ihr verwendet TeamViewer. Bietet alle Möglichkeiten und erfordert keine Portfreigaben und das Rad ist hier schon erfunden.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Ich denke, es wurde genug erklärt. Wenn Du Dir mal vor Augen führst, dass dies alles Grundlagen der Netzwerkommunikation sind, hast Du rein gar nichts an Erfahrung in diesem Gebiet. Darum schlage ich Dir vor, lass dieses Projekt, was immer es auch sein soll und widme Dich den Grundlagen. Wir wissen nicht, warum Dein Code nicht so funktioniert, wie Du es Dir vorstellst. Weil: Du hast den Code und Du kannst ihn debuggen. Darum: Eigne Dir entsprechendes Grundlagenwissen an und stell gezielt Fragen bei einem konkreten Problem.

    BTW: Eine Netzwerkkommunikation braucht niemals einen Timer. Solange Du nicht ohne diesen Timer auskommst, hast Du Dir den Code einfach von einem billigen Tutorial kopiert und hast Dir selber keine Gedanken darüber gemacht. Such im Forum mal nach VersuchsChat, da hast Du dann ein Beispiel, an dem Du Dich orientieren kannst. Aber das liegt atm noch jenseits Deines Könnes. Klingt hart, ist aber so. Dafür hast Du ein Gehirn, dass lernen kann.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Solange Du nicht ohne diesen Timer auskommst, hast Du Dir den Code einfach von einem billigen Tutorial kopiert und hast Dir selber keine Gedanken darüber gemacht.

    Den Code habe ich selber entworfen!
    Abgesehen mal davon der Timer checkt nur ob neue Behele eingetroffen sind!
    Und Du denkst, Deine Befehle würden sonst nicht eingehen? Du musst nicht alle paar Millisekunden nachschauen, ob ein Signal anliegt. Das Netzwerkinterface meldet das.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Hi,

    also ich sehe das ähnlich wie mein "Vorschreiber" aber ich finde man sollte nicht immer zuviel "Ratschläge" verteilen - denn das sind auch Schläge. Vielmehr sollte man hier versuchen Lösungswege auf zu zeigen - wenn auch nicht mit kompletten Code-Beispielen. Denn dann kommt das raus was leider vielen "Giebiets-Neulingen" passiert - zuviel Copy & Paste - aber sollte man doch nicht nur immer den Oberlehrer raushängen lassen - denn ich denke das ein Forum dazu da sein sollte jemanden zu helfen und nicht zu maßregeln bzw. zu zeigen wie schlecht er doch eigentlich ist.

    Also in Deinem Fall würde ich pers. folgendermaßen vorgehen - ganz abgesehen von Deinem Code:

    - als erstes würde ich mir Gedanken machen wie die Kommunikation meiner Anwendungen untereinander aussehen soll. Dies könnte z.B. Server - Client, Client - Server - Client ... sein.

    - dann würde ich mir überlegen über welchen Port diese Anwendungen untereinander kommunizieren sollen - schaue dir da einfach mal dies hier an http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml

    - dann war dein Ansatz mit dem herausfinden der externen IP ja richtig - hierzu kannst Du in der Client wie auch in der Host auf einen öffentlichen Dienst zurückgreifen oder aber wenn Du die Möglichkeit hast Dein eigenes Script auf einem Internetserver laufen lassen. So wissen dann beide Seiten wo wer zu finden ist. Wenn Du keinen eigenen Server oder die Möglichkeit hast so ein Script auf einer Seite Laufen zu lassen, kannst Du dies auch über einen eigenen von zu Haus aus machen (Thema dyndns), nur sollte dieser dann natürlich auch 24std. am Tag erreichbar sein.

    ...

    Kurzum: bevor Du mit einem so sicherheitsrelavanten Projekt beginnst (und das sind Projekte mit Netzwerkverkehr immer) überlege Dir vorab genau wie Du dieses Strukturierst. Der größte Fehler wäre in so einem Fall einfach drauf los zu programmieren und sich vielleicht mit Code aus irgendwelchen Tut's zu begnügen. Diese sind zwar sehr hilfreich um zu verstehen wie Techniken funktionieren - sollten aber dann auch verstanden und vor allem auf Sicherheit kontrolliert werden können.

    Ich pflichte meinen Vorschreibern aber in jedem Fall in den Punkten bei, wenn es darum geht nicht gleich mit einer Komplettlösung zu rechnen und vor allem nicht einfach C&P den Code von irgendwoher in sein eigenes Projekt zu übernehmen ohne mit der Materie vertraut zu sein. Denn dann kann es gut passieren das man sich Lücken in sein System reißt, welche echt katastrophale Auswirkungen haben können.

    Allerdings schreckt es wohl auch eher ab "banale" Fragen zu stellen, wenn man gleich mit Grundlagenwissen und Co. bombardiert wird.... (habt Ihr denn nicht Alle einmal angefangen und Euch Hilfe in Foren gesucht? Habt Ihr denn nicht auch am Anfang mal Probleme gehabt wie Ihr Eure Fragen richtig formuliert? Klar gibt es Cracks die haben es wohl nicht nötig (mehr) hier selber Fragen zu stellen - aber ich würde es begrüßen wenn man dies nicht unbedingt jedem auf die Nase binden muß, das man der "Bessere" ist. Mir ist es hier im Forum leider aufgefallen das es immer wieder vorkommt, dass die "Lernenden" zu regelrechten "Opfern" von gewissen Personen werden - zum Teil mit Kommentaren die mit dem Thema nun absolut nichts zu tun haben...

    So Klasse und toll dieses Forum und seine Mitglieder sind... so traurig ist das "Feingefühl" mancher Autoren von Kommentaren - gerade in letzter Zeit ...

    Sodele - das mußte ich hier nun mal los werden ;)
    Wenn das kein Virus wird, fress ich einen Besen. Topic geschlossen.

    Deine Threads sind mehr als auffällig. Für wie blöd hälst du uns eigentlich?
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum