Eternity Napisano Luty 11, 2019 Autor Zgłoś Udostępnij 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 Link do komentarza Udostępnij na innych stronach More sharing options...
Eternity Napisano Luty 11, 2019 Autor Zgłoś Udostępnij 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 Link do komentarza Udostępnij na innych stronach More sharing options...
Nemo Napisano Luty 13, 2019 Zgłoś Udostępnij 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 Link do komentarza Udostępnij na innych stronach More sharing options...
Eternity Napisano Luty 13, 2019 Autor Zgłoś Udostępnij 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 Link do komentarza Udostępnij na innych stronach More sharing options...
Complex Napisano Luty 14, 2019 Zgłoś Udostępnij 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 Link do komentarza Udostępnij na innych stronach More sharing options...
Eternity Napisano Luty 16, 2019 Autor Zgłoś Udostępnij 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 Link do komentarza Udostępnij na innych stronach More sharing options...
Shadow Napisano Marzec 1, 2019 Zgłoś Udostępnij 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 Link do komentarza Udostępnij na innych stronach More sharing options...
Eternity Napisano Marzec 6, 2019 Autor Zgłoś Udostępnij 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 Link do komentarza Udostępnij na innych stronach More sharing options...
Squirt Napisano Marzec 10, 2019 Zgłoś Udostępnij 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 Link do komentarza Udostępnij na innych stronach More sharing options...
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.