#include #include #include #include #include #include void main() { int ret; int debugSW; int k; char ReqCallList[56] = { 0x38, 0xc0, 0x01, 0x00, 0x37, 0x4d, 0x33, 0x54, 0x4a, 0x5a, 0x20, 0x20, 0x44, 0x56, 0x30, 0x31, 0x39, 0x39, 0x39, 0x39, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x57, 0x58, 0x49, 0x42, 0x32, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, 0x48, 0x53, 0x30, 0x32, 0x35, 0x37, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 }; unsigned char buff[4096], checksum; unsigned char temp[80]; unsigned char serial_no[10]; unsigned char version_no[10]; unsigned char Yes[10]; unsigned char ip[20]; unsigned char call[20]; long int serial, version; int i, n, l; WSADATA wsaData; struct sockaddr_in server; SOCKET sock; unsigned int **addrptr; if (WSAStartup(MAKEWORD(2,0), &wsaData) != 0) { printf("WSAStartup failed\n"); return; } sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == INVALID_SOCKET) { printf("socket : %d\n", WSAGetLastError()); return; } server.sin_family = AF_INET; server.sin_port = htons(20001); // ポートは80番 server.sin_addr.S_un.S_addr = inet_addr("opendstar.org"); if (server.sin_addr.S_un.S_addr == 0xffffffff) { struct hostent *host; host = gethostbyname("opendstar.org"); if (host == NULL) { if (WSAGetLastError() == WSAHOST_NOT_FOUND) { printf("host not found : %s\n", "opendstar.org"); } return; } addrptr = (unsigned int **)host->h_addr_list; while (*addrptr != NULL) { server.sin_addr.S_un.S_addr = *(*addrptr); // connect()が成功したらloopを抜けます if (connect(sock, (struct sockaddr *)&server, sizeof(server)) == 0) { break; } addrptr++; // connectが失敗したら次のアドレスで試します } // connectが全て失敗した場合 if (*addrptr == NULL) { printf("connect : %d\n", WSAGetLastError()); return; } } else { if (connect(sock, (struct sockaddr *)&server, sizeof(server)) != 0) { printf("connect : %d\n", WSAGetLastError()); return; } } n = send(sock, ReqCallList, 56, 0); if (n < 0) { printf("send : %d\n", WSAGetLastError()); closesocket(sock); WSACleanup(); return; } l = 0; do { n = recv(sock, buff, 502, 0); if (n == 0) break; if (n > 8) { for (i = 0; i < n; i++) { if (buff[i] == 0xf6) i += 8; if (l < 16) ip[l] = buff[i]; else call[l-16] = buff[i]; l++; if (l > 25) { printf ("%s %s\n",ip, call); l = 0; } } } } while(1); closesocket(sock); WSACleanup(); }