Нужно написать bat для виндов.

User avatar
KVA
Уже с Приветом
Posts: 5347
Joined: 03 Feb 1999 10:01
Location: NJ, USA

Post by KVA »

tengiz wrote:Мне ничего не надо :) - мне просто любопытно.


Да вопрос Бродяге был. Мне и самому любопытно.
blanko27
Уже с Приветом
Posts: 2264
Joined: 17 Jun 2003 04:41
Location: Just like US

Post by blanko27 »

Бродяга 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

в фаил сами сбрасывайте.
...а мы такой компанией, возьмем, да и припремся к Элис!
Бродяга
Уже с Приветом
Posts: 16086
Joined: 22 Apr 2003 17:57
Location: Колыбель

Post by Бродяга »

tengiz wrote:
Бродяга wrote:tengiz как штатными средствами в виндах зайти телнетом на 80й порт машины, get http и выйти из телнета. результаты сбросить в текстовый файл?

А WSH скрипты, который уже выложили не делают то что надо? Я серьёзно спрашиваю, потому что до меня не доходит, как через telnet сессию можно читать http - я конечно балда в web технологиях, но вроде это разные протоколы и разные TPC порты. Возможно я чего-то фундаментально не понимаю?

tengiz, нужен bat file что-бы юзверь кликнул на него и он сгенерил файл который мог-бы отправить кому надо. Я не знаю кому и зачем это надо. Я под унихом сижу. После очередных сокращений выяснили что те кто писал под винды исчезли как класс.
Через телнет можно на любой порт обратиться :wink:
Бог создал людей разными, Линкольн дал людям свободу, а Кольт всех уравнял.
Бродяга
Уже с Приветом
Posts: 16086
Joined: 22 Apr 2003 17:57
Location: Колыбель

Post by Бродяга »

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

в фаил сами сбрасывайте.

Спасибо.
Бог создал людей разными, Линкольн дал людям свободу, а Кольт всех уравнял.
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

Для правильных пацанов:

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;
}

Верить нельзя никому - даже себе. Мне - можно!
Palych
Уже с Приветом
Posts: 13724
Joined: 16 Jan 2001 10:01

Post by Palych »

"Я что - подлец?!!! Ты пачему мэня не спрашиваешь?!!!"(c)
А wget?!!!
http://www.interlog.com/~tcharron/wgetwin.html
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

Бродяга wrote:tengiz, нужен bat file что-бы юзверь кликнул на него и он сгенерил файл который мог-бы отправить кому надо. Я не знаю кому и зачем это надо. Я под унихом сижу. После очередных сокращений выяснили что те кто писал под винды исчезли как класс.

Так уже было аж два WSH скрипта-близнеца (а теперь уже три), которые делают ровно что надо - для юзверя ведь абсолютно никакой разницы нет запустить .bat/.cmd или .js/.vbs?
Cheers

Return to “Вопросы и новости IT”