W tej serii będę przedstawiać przydatne programy i narzędzia wygenerowane przez AI. Seria ograniczy się tylko do praktycznych przypadków, czyli takich, które naprawdę mi się przydarzyły i pomogły w pracy. Dziś na tapetę biorę tematykę sieciową i aplikację, którą udało się wygenerować za pierwszym razem, a samo jej postawienie zajęło mi w sumie ze 3 minuty. Będzie to zdalny pomost TCP na TCP pozwalający łatwo wystawić daną usługę poza NAT. Będzie to dobry przykład pokazujący jak bardzo pomocne są dzisiejsze modele sztucznej inteligencji.
Pomost był potrzebny przy testowaniu usługi powiązanej z API dla Home Assistant.
Problem
Mam dwa urządzenia, które chcę skomunikować po TCP, ale są osobne w osobnych sieciach lokalnych. Tylko jedna z sieci daje mi możliwość przekierowania portu na routerze (posiada publiczne IP) a na domiar złego to jest ta sieć, która w moim zastosowaniu byłaby stroną kliencką. Nie mam jak w normalny sposób zatem nawiązać tego połączenia, a potencjalne rozwiązania (których nawiasem mówiąc trochę jest) wydają się wymagać troszkę konfiguracji i zabawy.
Rozwiązanie
Mój pomysł to dwie aplikacje w C#, jedna będzie "podwójnym serwerem" i postawię ją na maszynie z publicznym IP (przekierowany port), a druga będzie klientem i postawię ją zdalnej maszynie. Obie aplikacje będą przerzucać po prostu dane między socketami.
Prompt
Bez cenzury. Całość autentycznie tak, jak pisałem. Wybaczcie luźny styl, grunt, że działa:
Write C# console TCP to TCP bridge. What I need:
RemoteMachine:
- connect to two IPs and ports, forward traffic between them, if any connection dies, just reopen it, do not block, be fast, use Available () etc, in console title show stats as sent/received (two numbers) , and state of each connection, take ips/ports from args
LocalMachine:
- Provide two open ports waiting for connection, also show state in console title, also forward traffic between them, also be very quick, one client per each port max ofc so it makes sense
So give just two files, minimal working demo, ofc course ignore are errors, it must be stable, it must work without attendance. Each tool should also dump to console received packets in hex with [timestamp] IP:port -> IP:port AABBCCFF format
Kod
Maszyna lokalna (dwa serwery); to ona wymaga publicznego IP:
Kod: C#
Maszyna zdalna (dwa klienty):
Kod: C#
Testowanie
Skopiowałem, skompilowałem i odpaliłem... i w zasadzie działa. Spełnia swoją rolę. Po powrocie do komputera po pół godziny musiałem odpalić ponownie oba programy, bo chyba któryś socket zawisł, ale to nie problem. Wygląda na to, że dostałem to czego chciałem i to kosztem minuty pisania zapytania do AI. Jestem zadowolony.
Co można by ulepszyć?
Mam wrażenie, że można by bardziej uodpornić ten program na oczywiste błędy i dodać lepsze wyświetlanie stanu socketów. Nie pokusiłem się jeszcze jednak o to, bo szkoda mi było zabawy.
Podsumowując, oszczędziłem troszkę czasu a wszystko działa bez zarzutów. Poniekąd rozumiem, że tyle jest mowy o spadku wartości programistów juniorów, jak takie przydatne rzeczy potrafi wygenerować LLM. Oczywiście tu trzeba zwrócić uwagę na to, że ja z góry wiedziałem czego potrzebuję i potrafiłem zawrzeć to w prompcie - kompletny początkujący mógłby mieć z tym problem, więc ogólna wiedza jest wciąż bardzo potrzebna, a nawet wydaje się, że teraz duże doświadczenie jest jeszcze cenniejsze niż przed erą AI...
Można by tutaj nieco dyskutować, czy rzeczywiście sama moja idea miała sens - czy może lepiej po prostu wziąć jakieś gotowe rozwiązanie? Możliwe, że ktoś z czytających takie rozwiązanie zna i ma sprawdzone, ja natomiast nie chciałem przeczesywać Internetu przez godzinę czy ileś i uważam, że naprawdę oszczędziłem czas.
Podoba mi się też to, że dostaję kod zrobiony wedle wymagań i bez poprawek. W przypadku trudniejszych zadań tak nie ma, ale trudniejszych zadań i tak nie robiłby junior LLM.
A jak Wy uważacie? Czy też udało Wam się wygenerować jakieś autentycznie przydatne programy?
PS: Oczywiście to rozwiązanie nie u każdego się sprawdzi, bo nie każdy ma publiczne IP i opcję przekierowania portu. Dodatkowo są różne usługi, tunele, VPN, itd. Jestem tego świadom. Celowo ich nie chciałem użyć - chciałem mieć rozwiązanie szybkie i "czyste". Temat jednak nie miał na celu forsowania tego rozwiązania jako poprawne, po prostu chciałem pokazać, jak pomocne może być AI w przypadku prostych i typowych zadań.
Fajne? Ranking DIY Pomogłem? Kup mi kawę.