Eternity Napisano Luty 11, 2019 Autor Zgłoś Napisano Luty 11, 2019 Chce otworzyc socketa asynchronicznie aby nasluchiwal na porcie 139, ale ciagle wyskakuje mi na funkcji 'listen' - za chiny ludowe nie chce mi ona ruszyc. Ciagle zwraca mi -1... :( Kod wyglada tak : #include <windows.h> #include <winsock2.h> #include <stdio.h> #include "resource.h" #define NET_ERROR -1 #define WM_TRAY WM_USER + 100 #define SOCKET_MSG WM_USER + 200 #define SOCKET_MSG_READ WM_USER + 300 NOTIFYICONDATA nid; WORD sockVer; WSADATA wsaData; SOCKET listeningSocket; SOCKADDR_IN serverInfo; LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); char szClassName[] = "WindowsApp"; int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { HWND hwnd; MSG messages; WNDCLASSEX wincl; char *text; BOOL bOptVal = TRUE; int bOptLen = sizeof(BOOL); wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; wincl.style = CS_DBLCLKS; wincl.cbSize = sizeof (WNDCLASSEX); wincl.hIcon = LoadIcon (NULL, MAKEINTRESOURCE(IDI_ICON1)); wincl.hIconSm = LoadIcon (NULL, MAKEINTRESOURCE(IDI_ICON1)); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND; if (!RegisterClassEx (&wincl)) return 0; hwnd = CreateWindowEx ( 0, szClassName, "Windows App", WS_DISABLED, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, HWND_DESKTOP, NULL, hThisInstance, NULL ); /* Make the window visible on the screen */ //ShowWindow (hwnd, nFunsterStil); //socket initialization sockVer=MAKEWORD(2,2); WSAStartup(sockVer, &wsaData); listeningSocket=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(listeningSocket==INVALID_SOCKET) { WSACleanup(); return NET_ERROR; } serverInfo.sin_family=AF_INET; serverInfo.sin_addr.s_addr=INADDR_ANY; serverInfo.sin_port=htons(139); if ( setsockopt(listeningSocket, SOL_SOCKET, SO_REUSEADDR, (char*)&bOptVal, bOptLen) !=0 ) { sprintf(text,"%d",WSAGetLastError()); WSACleanup(); MessageBox(hwnd, text , "Setsockopt sie wysypalo na reuseaddr...", MB_OK); return NET_ERROR; } if ( bind(listeningSocket, (SOCKADDR*)&serverInfo, sizeof(SOCKADDR_IN)) != 0 ) { sprintf(text,"%d",WSAGetLastError()); WSACleanup(); MessageBox(hwnd, text , "Tym razem nie binduje...", MB_OK); return NET_ERROR; } if ( listen(listeningSocket, 1) != 0 ) { sprintf(text,"%d",WSAGetLastError()); WSACleanup(); MessageBox(hwnd, text , "I znowu ten listen...", MB_OK); return NET_ERROR; } WSAAsyncSelect(listeningSocket, hwnd, SOCKET_MSG, FD_ACCEPT); MessageBox(hwnd, NULL, "Tym razem wszystko ok !", MB_OK); while (GetMessage (&messages, NULL, 0, 0)) { TranslateMessage(&messages); DispatchMessage(&messages); } return messages.wParam; } . . . Dalej jest ciag dalszy kodu, al ew tej chwili zupelnie nieistotny. Wienc o so tu chosi ??? Cytuj
Eternity Napisano Luty 11, 2019 Autor Zgłoś Napisano Luty 11, 2019 Oops - zapomnialem... Cos lezy na rzeczy z portem 139 - bo na przykladowo 1039 program rusza... Dlazcego nie da sie otworzyc 139 ? Wiem, ze jest 'systemowym', ale co z tego ? UPDATE : zapomnialbym - blad wyskakuje 10022 - najprawdopodobniej chodzi o blad gdzies w strukturze danych socketa badz socket juz nasluchuje.. co nie jest mozliwe :) Juz sil mi zaczyna brakowac do tego cholernego winapi... UPDATE2: ok, burak byl w bindzie - doszedlem, ze 139 musi (chyba... ;) byc otwart z opcja SO_REUSEADDR - ale teraz przy bind wyskakuje error 10013 - WSAEACCES... No do jasnego.. jak nasluchiwac na 139 porcie ?! Szlak mnie trafi za chwile... Cytuj
Nemo Napisano Luty 13, 2019 Zgłoś Napisano Luty 13, 2019 A wiesz do czego uzywa windows tego portu? Moze poprostu windows ma jakies specjalen zadanie na tym porcie i wymaga od wszystkich co nasluchuja na tym porcie jakis specjalnych rzeczy lub poprostu windows juz nasluchuje na tym porcie a jak wiadomo na tym samym ip i tym samym porcie nei moze byc uruchominonych dwoch programow ktore nasluchuja (serwerow). ps to jest WinSock a nie WinAPI ;) Cytuj
Eternity Napisano Luty 13, 2019 Autor Zgłoś Napisano Luty 13, 2019 Jakis czas temu zalozylem topic o przechwytywaniu wiadomosci msn przesylanych lan-em. Wlasnie one przychodza portem 139. I owszem, jest on juz otwarty - wlasnie messanger na nim nasluchuje. teoretycznie da sie otworzyc kilka socketow na tym samym adresie (ip+port) - tylko musza miec opcje SO_REUSEADDR. W kazdym badz razie za chiny nie potrafie przechwycic jakiejkolwiek. Wiec jak nikt nie jest w stanie pomoc - to przechodzimy do planu BETA - czyli sprawdzanie, czy wyskoczylo okienko Messengera z wiadomoscia - jesli tak, sprawdza w nim tekst, jak odpowiada pewnemu wzorcowi - zamyk okno Messengera i pokazuje wlasne :D Wiec pytanko - tym razem juz czyste WinAPI :P Czy jest jakies zdarzenie (ktore mozna zarzadac od systemu aby bylo przekazywane do naszego okna), ktore informuje o utworzeniu i wyswietlneiu przez system jakiegokolwiek nowego okna, nie wazne jakiej aplikacji ? Moge zrobic przy pomocy timera sprawdzanie co jakis czas czy jest wyswietlone okno messengera, ale bardziej eleganckim sposobem bedzie wykorzystanie wlasnie takiego systemowego zdarzenia :) Cytuj
Complex Napisano Luty 14, 2019 Zgłoś Napisano Luty 14, 2019 To chiba bedziesz musiał założyc globalnego hooka i przechwytywać komunikaty z tego messengera. Chyba, ze istnieje jakis prostrzy sposób ale jakoś nie przychodzi mi do glowy teraz :P Cytuj
Eternity Napisano Luty 16, 2019 Autor Zgłoś Napisano Luty 16, 2019 No jak na razie kombinuje z pzreszukiwaniem otwartych okien, jak juz wyczaje jaka nazwe klasy ma to wyswietlajace wiadomosc, FindWindow-em wezme jego hwnd a potem postaram sie wyciagnac wyswietlany tekst (o ile sie uda :) ). Zobaczymy co z tego wyjdzie... :) UPDATE : qpa... Bede musial jednak zalozyc hooka... :( Cytuj
Shadow Napisano Marzec 1, 2019 Zgłoś Napisano Marzec 1, 2019 da sie uzywac portu/wiadomosci messengera innym programem. w konnekcie jest wtyka kLan, ktora obsluguje wiadomosci po lanie i korzysta wlasnie z messangera w NT i winpopup w systemach 9x. teoretycznie serwis ten musi byc wylaczony, ale mi klan dzialal i z wlaczonym. o ile sie nie myle ktos pisal tez chyba wtyke do tlena kompatybilna z klanem i jest cos o tym na forum konnekta Cytuj
Eternity Napisano Marzec 6, 2019 Autor Zgłoś Napisano Marzec 6, 2019 shw napisał: da sie uzywac portu/wiadomosci messengera innym programem. w konnekcie jest wtyka kLan, ktora obsluguje wiadomosci po lanie i korzysta wlasnie z messangera w NT i winpopup w systemach 9x. teoretycznie serwis ten musi byc wylaczony, ale mi klan dzialal i z wlaczonym. o ile sie nie myle ktos pisal tez chyba wtyke do tlena kompatybilna z klanem i jest cos o tym na forum konnekta Cos nie moge znalezc... Przeszukalem tamto forum i nic :( Moze jakies dokladniejsze info ? Cytuj
Squirt Napisano Marzec 10, 2019 Zgłoś Napisano Marzec 10, 2019 xor napisał: No jak na razie kombinuje z pzreszukiwaniem otwartych okien, jak juz wyczaje jaka nazwe klasy ma to wyswietlajace wiadomosc, FindWindow-em wezme jego hwnd a potem postaram sie wyciagnac wyswietlany tekst (o ile sie uda :) ). Zobaczymy co z tego wyjdzie... :) UPDATE : qpa... Bede musial jednak zalozyc hooka... :( zamiast FindWindow uzyj FindWindowEx albo zrob enumeracje okien podrzednych w systemie Cytuj
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.