tengiz wrote:Мне ничего не надо- мне просто любопытно.
Да вопрос Бродяге был. Мне и самому любопытно.
Бродяга wrote:...как штатными средствами в виндах зайти телнетом на 80й порт машины, get http и выйти из телнета. результаты сбросить в текстовый файл?
Code: Select all
set sh=WScript.CreateObject("WScript.Shell")
sh.Run "telnet localhost 80"
WScript.Sleep 500
sh.SendKeys "GET http://localhost/pupkin.html" + vbCrLf
WScript.Sleep 500
sh.SendKeys "exit" + vbCrLf
tengiz wrote:Бродяга wrote:tengiz как штатными средствами в виндах зайти телнетом на 80й порт машины, get http и выйти из телнета. результаты сбросить в текстовый файл?
А WSH скрипты, который уже выложили не делают то что надо? Я серьёзно спрашиваю, потому что до меня не доходит, как через telnet сессию можно читать http - я конечно балда в web технологиях, но вроде это разные протоколы и разные TPC порты. Возможно я чего-то фундаментально не понимаю?
blanko27 wrote:Бродяга wrote:...как штатными средствами в виндах зайти телнетом на 80й порт машины, get http и выйти из телнета. результаты сбросить в текстовый файл?Code: Select all
set sh=WScript.CreateObject("WScript.Shell")
sh.Run "telnet localhost 80"
WScript.Sleep 500
sh.SendKeys "GET http://localhost/pupkin.html" + vbCrLf
WScript.Sleep 500
sh.SendKeys "exit" + vbCrLf
в фаил сами сбрасывайте.
Code: Select all
int host_connect(const char* lpszHost, unsigned int nPort)
{
int sockfd = -1;
struct hostent *pHostdata;
struct sockaddr_in hostaddr;
if (!lpszHost)
return sockfd;
pHostdata = gethostbyname(lpszHost);
if (!pHostdata)
{
//check h_errno and get the description with hstrerror()
return -1;
}
if (pHostdata->h_addrtype != AF_INET)
{
//currently AF_INET6 is not supported
return -1;
}
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1)
return -1;
memset((void*) &hostaddr, 0, sizeof(hostaddr));
hostaddr.sin_family = AF_INET;
hostaddr.sin_port = htons(nPort);
#ifndef WIN32
hostaddr.sin_addr.s_addr = *((u_int32_t*)(*pHostdata->h_addr_list));
#else
hostaddr.sin_addr.s_addr = *((unsigned int*)(*pHostdata->h_addr_list));
#endif //WIN32
if (connect(sockfd, (struct sockaddr*) &hostaddr, sizeof(hostaddr)) < 0)
{
return -1;
}
return sockfd;
}
/*
**get_httpfile() - this function returns open temporary file that is a copy of
**the file lpszFile downloaded from lpszHost
*/
FILE* get_httpfile(const char* lpszHost, const char* lpszFile, int bGet, unsigned int nPort)
{
int sockfd;
int len;
char *pQuery;
int bRslt;
char szBuffer[2048];
FILE *f;
if (!lpszHost || !lpszFile || !strlen(lpszHost) || !strlen(lpszFile))
return NULL;
sockfd = host_connect(lpszHost, nPort);
if (sockfd == -1)
return NULL;
len = strlen(lpszHost) + strlen(lpszFile);
len += 60;
pQuery = (char*) malloc(len);
if (!pQuery)
return NULL;
sprintf(pQuery, "%s %s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",
bGet?"GET":"POST", lpszFile, lpszHost);
len = strlen(pQuery);
#ifndef WIN32
bRslt = (send(sockfd, (void*) pQuery, len, 0) == len);
#else
bRslt = (send(sockfd, pQuery, len, 0) == len);
#endif //WIN32
free((void*) pQuery);
if (!bRslt)
{
//sockfd was opened by host_connect()
#ifndef WIN32
close(sockfd);
#else
closesocket(sockfd);
#endif //WIN32
return NULL;
}
f = tmpfile();
if (!f)
{
#ifndef WIN32
close(sockfd);
#else
closesocket(sockfd);
#endif //WIN32
return NULL;
}
#ifndef WIN32
while(len = recv(sockfd, (void*) &szBuffer, sizeof(szBuffer), 0))
#else
while(len = recv(sockfd, (char*) &szBuffer, sizeof(szBuffer), 0))
#endif //WIN32
{
if (len == -1)
break;
fwrite((void*) szBuffer, 1, len, f);
}
#ifndef WIN32
close(sockfd);
#else
closesocket(sockfd);
#endif //WIN32
fseek(f, 0, SEEK_SET);
return f;
}
Бродяга wrote:tengiz, нужен bat file что-бы юзверь кликнул на него и он сгенерил файл который мог-бы отправить кому надо. Я не знаю кому и зачем это надо. Я под унихом сижу. После очередных сокращений выяснили что те кто писал под винды исчезли как класс.