Socket over Lan

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
LUCKYONE
User
Beiträge: 5
Registriert: Mittwoch 31. März 2021, 23:31

Mittwoch 31. März 2021, 23:44

Hallo,

da ich jetzt schon seit einer weile nach einer Lösung für dieses Problem suche, aber leider nicht fündig geworden bin, schreibe ich jetzt diesen Beitrag.
Und zwar habe ich das Problem, dass ich mich mit meinem Programm nur Lokal, und nicht mit einem physisch getrennten PC verbinden kann.(Der auch nicht im gleichen Netzwerk ist)
Ich zeige hier einmal den Code vor:
Ps Beim ausführen des Programms gibt es immer einen Tracebackfehler. Dieser wird aber nur angezeigt, wenn ich es mit einer Internetaddresse versuche..

#Server

import os
import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
host = '79.248.***.**' #Die * nur zur Verdeckung der IP
port = 80
server_socket.bind((host, port))
print("")
print("Ich bin die Backdoor! Server ist Online", host)
print("")
print("Warte auf Verbindungen...")
server_socket.listen(1)
conn, addr = server_socket.accept()
print("")
print(addr, " Erfolgreiche Verbindung zu dem Server hergestellt! ")


#Client

import os
import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket = socket.socket()
port = 80
host = input(str("Ich bin der Client! Bitte gebe nun die Serveraddresse an: "))
client_socket.connect((host,port))
print("")
print("Erfolgreich mit dem Server verbunden!")
print("")


#Fehlercode

server.py", line 8, in <module>
server_socket.bind((host, port))
OSError: [WinError 10049] Die angeforderte Adresse ist in diesem Kontext ungültig
Sirius3
User
Beiträge: 14232
Registriert: Sonntag 21. Oktober 2012, 17:20

Donnerstag 1. April 2021, 08:41

Für `host` sind bei bind eigentlich nur zwei Werte sinnvoll 127.0.0.1 oder 0.0.0.0. Du wirst keine direktes Gateway zu 79.248.*.* haben.
Port 80 ist zudem ein reservierter Port, benutze einen >1024.
`str` auf einen literalen String aufzurufen, ist Unsinn.
LUCKYONE
User
Beiträge: 5
Registriert: Mittwoch 31. März 2021, 23:31

Donnerstag 1. April 2021, 12:16

@Sirius3 Ok.. Aber wenn ich den Wert 0.0.0.0 oder 127.0.0.1 beim Host eingebe und meine Internet IP im client, kommt ein Timeout..
Sirius3
User
Beiträge: 14232
Registriert: Sonntag 21. Oktober 2012, 17:20

Donnerstag 1. April 2021, 12:45

Hast Du denn prinzipiell Zugriff von einem Rechner auf den anderen?
LUCKYONE
User
Beiträge: 5
Registriert: Mittwoch 31. März 2021, 23:31

Donnerstag 1. April 2021, 20:55

Sie sind in einem Raum, aber nicht in einem Netzwerk.. So gesehen möchte ich einfach nur wissen, wie ich in Python physikalisch getrennte Pcs dazu bringe Daten auszutauschen(mit physikalisch getrennten Pcs meine ich Pcs, die nicht in ein und dem selben Netzwerk sind) . Also deswegen die Frage, wie ich mich mit einem Pc verbinde, der nicht in meinem Netzwerk ist.
Benutzeravatar
__blackjack__
User
Beiträge: 8463
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Donnerstag 1. April 2021, 22:32

@LUCKYONE: Wenn die nicht im gleichen Netzwerk sind, dann geht eine Verbindung so ganz allgemein gar nicht, deswegen trennt man Rechner ja in verschiedene Netzwerke. Ob und wie das nun in deinen beiden Netzwerken vielleicht doch geht, weil es beispielsweise einen Router gibt, kann Dir ohne allwissende Glaskugel niemand sagen. Das ist jetzt auch nicht wirklich eine Python-Frage.
“For every complex problem, there is a solution that is simple, neat, and wrong.” — H. L. Mencken
LUCKYONE
User
Beiträge: 5
Registriert: Mittwoch 31. März 2021, 23:31

Freitag 2. April 2021, 13:23

@blackjack Das Problem ist das du die Antwort offensichtlich nicht kennst. :-)Dann würde ich an deiner Stelle auch keine Antwort geben ;-). Natürlich muss das funktionieren ! Und es interessiert auch nicht, wie man das allgemein oder in C# oder Java löst. Es geht auch nicht um eine Glaskugel. Es soll ja hier nicht geraten werden. Entweder kennt jemand ne Antwort, oder weiß wie man Client, Server oder Backdoors über Rechner in verschiedenen Netzwerken programmiert oder nicht. Ich meine irgendwie funktionieren ja auch Trojaner oder Viren ? Vg
paddie
User
Beiträge: 34
Registriert: Donnerstag 11. Oktober 2018, 18:09

Freitag 2. April 2021, 13:54

Wenn du schon solche Dinge programmieren willst solltest du dich vielleicht selbst erstmal mit den Grundlagen von Netzwerken vertraut machen. Auch Trojaner/Viren/whatever sind auf Router oder Bridges angewiesen da sie sonst nicht ins internet kommen und haben irgendeine Kontrollinstanz auf irgendeinem Server der entweder direkt ober vielleicht auch über eine VPN-Verbindung erreichbar ist. Zaubern können die auch nicht...
LUCKYONE
User
Beiträge: 5
Registriert: Mittwoch 31. März 2021, 23:31

Freitag 2. April 2021, 14:15

@paddie Genau deswegen bin ich doch hier.. Ich möchte lediglich wissen, wie ich es erreiche mich mit meinem Socket erfolgreich ins Internet zu Verbinden.
Bedeutet, dass ich nur wissen möchte, was ich im Quellcode verändern muss, damit ich mich auf meinen zweit Pc verbinden kann, und das wie gesagt nicht Lokal.
DasIch
User
Beiträge: 2609
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Freitag 2. April 2021, 15:19

Das Internet ist ein Netzwerk. Wenn beide Computer mit dem Internet verbunden sind, sind sie im selben Netzwerk und auch physisch miteinander verbunden. Blackjack ist wahrscheinlich davon ausgegangen dass du mit solchen Grundlagen vertraut ist und hat dementsprechend vollkommen zurecht darauf hingewiesen dass voneinander physisch getrennte Computer unmöglich miteinander kommunizieren können.

Nun zu deinem Problem: Das was du vorhast ist i.d.R. nicht möglich weil es Router durch NAT, Firewalls usw. verhindern. Trojaner oder Viren funktionieren so auch nicht, sondern verbinden sich mit einem (oder mehreren) zentralen Server(n). Das machen effektiv auch P2P Lösungen die i.d.R. hole punching nutzen und einen dritten Server miteinbeziehen um Verbindungen aufzubauen.
Benutzeravatar
__blackjack__
User
Beiträge: 8463
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Freitag 2. April 2021, 15:48

@LUCKYONE: ”Das” muss natürlich nicht funktionieren. Du hast gesagt Du hast zwei Rechner in zwei unterschiedlichen Netzwerken. Die können nicht miteinander kommunizieren. Es sei denn die Netzwerke sind beispielsweise über einen Router verbunden. Solange Du aber nichts weiter über Deine beiden Netzwerke verrätst kann man nur raten wie das dann konkret geht. Oder ob es überhaupt geht, denn da kommt es dann ja immer noch darauf an wie der Router konfiguriert ist, also in welche Richtung der was weiterleitet oder eben auch nicht. Und das ist völlig unabhängig von der Programmiersprache. Python, C#, Java, und fast alles andere bietet letztlich genau die gleiche Socket-API an, weil das die Schnittstelle ist, die vom Betriebssystem angeboten wird.

Viren haben erst einmal nichts mit Netzwerken zu tun, die verbreiten sich klassischerweise dadurch, dass man eine infinzierte ausführbare Datei von irgendwo her hat, die ausführt, und dabei dann weitere ausführbare Dateien infiziert werden. Der Benutzer muss halt irgendwo ”erstinfiziert” werden. Normalerweise weil er sich von jemand anderem eine infizierte Datei kopiert hat. Nicht selten irgendwelche dubiosen Quellen aus dem Netz. Manchmal auch nicht-dubiose Quellen.

Trojaner funktionieren ähnlich. Der Benutzer führt irgend etwas aus dubioser Quelle aus, das nach etwas tollem, nützlichen aussieht, und holt sich damit selbstständig die Schadsoftware in sein Netz, hinter die Schutzmauern. Eben wie beim Holzpferd in der Geschichte um Troja.

Und dann ist da auch gar kein grosses Geheimnis mehr wie sich die Rechner verbinden, denn der Trojaner ist in Deinem Netz und der Steuerrechner im grossen bösen Internet, und von einem Rechner in Deinem Netz eine Verbindung zu Port 80 zu einem Rechner im Internet aufzubauen ist überhaupt nichts besonderes. Das geht einfach so. Sonst würde der Webbrowser nicht funktionieren, denn der macht auch genau das. In die Richtung und auf dem Port lässt Dein Router nämlich Verbindungen zu und leitet antworten aus dem Internet auch wieder zu dem Rechner in deinem Netzwerk weiter. Auch da wieder: sonst würde ein Webbrowser nicht funktionieren.
“For every complex problem, there is a solution that is simple, neat, and wrong.” — H. L. Mencken
Benutzeravatar
kbr
User
Beiträge: 1230
Registriert: Mittwoch 15. Oktober 2008, 09:27

Freitag 2. April 2021, 17:12

@LUCKYONE: Vielleicht noch zur weiteren Verdeutlichung des Problems: Üblich sind lokale Netzwerke in denen private ip-Addressbereiche genutzt werden und die über einen Router Zugang zum Internet haben. Es ist möglicherweise bei Dir der Fall, dass zwei solche Netzwerke aufgesetzt sind, die jeweils über einen eigenen Router Verbindung mit dem Internet haben und somit Bestandteil *eines* Netzwerkes sind.

Um nun von einem lokalen Netzwerk aus das andere anzusprechen, müssen die ip-Adressen der Router bekannt sein. Wenn dies der Fall ist, kann von beiden lokalen Netzwerken aus aber nur der Zugriff auf den Router des jeweils anderen lokalen Netzwerkes erfolgen; ein direkter Durchgriff auf die privaten ip-Adressen der Rechner hinter dem Router ist nicht möglich. Das lässt sich wenn, dann nur durch eine entsprechende Konfiguration der Router ermöglichen – also selektiv den Schutz durch NAT und Firewall deaktivieren. Der Rechner, auf den so der Zugriff ermöglicht wird, ist ab dann allen Zugriffen aus dem Netz direkt ausgesetzt und befindet sich gleichfalls *im* lokalen Netzwerk.

So etwas überlegt man sich dreimal, lässt es anschließend bleiben, und setzt stattdessen ein weiteres Netzwerk auf, das dann geöffnet (und angreifbar) wird. Das könnte dann aber auch direkt ein Server im Internet sein, der dementsprechend konfiguriert ist.
Benutzeravatar
__blackjack__
User
Beiträge: 8463
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Freitag 2. April 2021, 18:08

Wobei bei dem Szenario auch ein Router ausreichen könnte, denn auch in normalen Heimnetzen ist ein Gastnetz über den Router der den Zugang zum Internet bereit stellt, nichts ungewöhnliches. Und auch da will man ja gerade *nicht* das die Geräte aus dem Gastnetz und dem restlichen Heimnetz in Berührung kommen. Das ist ja der Sinn und Zweck ein Gastnetz aufzusetzen.
“For every complex problem, there is a solution that is simple, neat, and wrong.” — H. L. Mencken
Benutzeravatar
kbr
User
Beiträge: 1230
Registriert: Mittwoch 15. Oktober 2008, 09:27

Freitag 2. April 2021, 19:07

Das stimmt, dieses Szenario wäre gleichfalls möglich. Wie es wirklich ausschaut, wissen wir nicht; könnte aber zutreffend sein, wenn sich die Rechner im gleichen Raum befinden.
Antworten