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

Бродяга
Уже с Приветом
Posts: 16086
Joined: 22 Apr 2003 17:57
Location: Колыбель

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

Post by Бродяга »

Привет народ,
сегодня руководство озадачило. нужно простой bat file для виндов
telnet x.x.x.x 80
<wait for a response 10 seconds>
Then get http
Then <crtl c>
Save output to the file.
Реально ли такое сделать в виндах?
Бог создал людей разными, Линкольн дал людям свободу, а Кольт всех уравнял.
ig
Уже с Приветом
Posts: 491
Joined: 09 Apr 2000 09:01
Location: Tigard, OR

Post by ig »

<a href="http://expect.nist.gov" target="_blank">expect</a> для Windows?
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

не-нене.. Ждем тенгиза и пусть расскажет как легко ето сделать на Виндовс. А то в теории много защитников у МС.
Верить нельзя никому - даже себе. Мне - можно!
Слiн
Уже с Приветом
Posts: 1407
Joined: 07 Jan 2003 19:51
Location: НорКа

Post by Слiн »

Ну типа

в файл getstuff.js:

// Create an xmlhttp object:
var xml = WScript.CreateObject("Microsoft.XMLHTTP")

// Open the connection to the remote server.
xml.Open("GET", "http://www.linux.com", false)

// Actually Sends the request and returns the data:
xml.Send()

//write result into a file
var fs=WScript.CreateObject("Scripting.FileSystemObject")
var f=fs.OpenTextFile("c:\\stuff\\shit.txt",8,true)
f.Write(xml.responseText)
f.Close();

запускать из командной строки

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

Post by KVA »

Если все что надо сгрузить данные по HTTP в файл, то что-то типа такого.

Файл get.js:

Code: Select all

var xmlhttp = WScript.CreateObject("Microsoft.XMLHTTP");
   
xmlhttp.open("GET","http://www.yahoo.com", false);
xmlhttp.send();

var fso = WScript.CreateObject("Scripting.FileSystemObject");
var f = fso.CreateTextFile("C:\\TEMP\\yahoo.txt", true);

f.write(xmlhttp.ResponseText);
f.close();


Запуск: cscript get.js
User avatar
KVA
Уже с Приветом
Posts: 5347
Joined: 03 Feb 1999 10:01
Location: NJ, USA

Post by KVA »

Синхронненько, однако ответили .... :mrgreen: :mrgreen: :mrgreen:
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

A. Fig Lee wrote:не-нене.. Ждем тенгиза и пусть расскажет как легко ето сделать на Виндовс. А то в теории много защитников у МС.

Я таких страшных слов как telnet x.x.x.x или get http не знаю, а также не понимаю, что значит ctrl-c в этом контексте. а вообще - я конечно догадывался, что А. Фиг Лее на редкость мелочная зануда в любом вопросе - но чтобы настолько??? а windows я не "защищаю", я в ней каждый день работаю и не жалуюсь. "защищаю" же время от времени тех доверчивых, которым пытаются развешивать лапшу на уши невежественной или недобросовестной околотехнической халтуры. так как windows я знаю лучше, чем фреебздю, то и говорю я в основном о ней. если бы я знал линюх, то его бы тоже "защищал" когда следует.
Cheers
Бродяга
Уже с Приветом
Posts: 16086
Joined: 22 Apr 2003 17:57
Location: Колыбель

Post by Бродяга »

tengiz wrote:
A. Fig Lee wrote:не-нене.. Ждем тенгиза и пусть расскажет как легко ето сделать на Виндовс. А то в теории много защитников у МС.

Я таких страшных слов как telnet x.x.x.x или get http не знаю, а также не понимаю, что значит ctrl-c в этом контексте. а вообще - я конечно догадывался, что А. Фиг Лее на редкость мелочная зануда в любом вопросе - но чтобы настолько??? а windows я не "защищаю", я в ней каждый день работаю и не жалуюсь. "защищаю" же время от времени тех доверчивых, которым пытаются развешивать лапшу на уши невежественной или недобросовестной околотехнической халтуры. так как windows я знаю лучше, чем фреебздю, то и говорю я в основном о ней. если бы я знал линюх, то его бы тоже "защищал" когда следует.

tengiz как штатными средствами в виндах зайти телнетом на 80й порт машины, get http и выйти из телнета. результаты сбросить в текстовый файл?
Бог создал людей разными, Линкольн дал людям свободу, а Кольт всех уравнял.
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

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

А WSH скрипты, который уже выложили не делают то что надо? Я серьёзно спрашиваю, потому что до меня не доходит, как через telnet сессию можно читать http - я конечно балда в web технологиях, но вроде это разные протоколы и разные TPC порты. Возможно я чего-то фундаментально не понимаю?
Cheers
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

<added>

Бродяга, ради Бога не поймите меня неправильно - я вообще-то мимо проходил, да вот только что-то меня достало фиглёвое мелочное занудство - только поэтому я и что-то ему брякнул. Так как я имею очень базовые и фрагментарные сведения в этой бесконечно далёкой от меня теме, я бы спокойно прошёл бы мимо и не морочил бы никому голову. Но фигли удалось то, что наверное до сих под удавалось может быть паре человек на привете за те три с половиной года, которые я здесь ошиваюсь - он успешно спровоцировал меня на грубость.

</added>
Cheers
Hamster
Уже с Приветом
Posts: 11475
Joined: 20 Nov 2000 10:01
Location: Escondido, CA

Post by Hamster »

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


Протокола как такового там нет. Достаточно зайти по telnet на 80-й порт, послать команду

GET / HTTP/1.0 \n\n

( \n = CR/LF ), в ответ telnet выдаст сайт. Через echo xxx | telnet это почему-то не работает.
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

Hamster, а что нужно нужно набать в интерактивной telnet сессии, чтобы это выполнить?
Cheers
Hamster
Уже с Приветом
Posts: 11475
Joined: 20 Nov 2000 10:01
Location: Escondido, CA

Post by Hamster »

Это и набрать.
GET / HTTP/1.0 <enter> <enter>

GET /index.htm HTTP/1.0 <enter> <enter>
User avatar
KVA
Уже с Приветом
Posts: 5347
Joined: 03 Feb 1999 10:01
Location: NJ, USA

Post by KVA »

Так вам шашечки или ехать? Скрипты делают то что вам надо или вы именно через telnet хотите?
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

Мне ничего не надо :) - мне просто любопытно.
Cheers
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: 13682
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”