mIRC Home    About    Download    Register    News    Help

Print Thread
using sockets to send web form #26844 29/05/03 03:27 AM
Joined: Dec 2002
Posts: 18
T
TomT Offline OP
Pikka bird
OP Offline
Pikka bird
T
Joined: Dec 2002
Posts: 18
I am need of causing mirc to send information to a website using sockets. The process I want to use is to duplicate the information a browser would send for a web form. I am hoping someone can either show me the exact format the information would need to be sent in.. or possibly help me find a way of capturing that information while actually using a browser to send the form.. any ideas would be appreciated.

Re: using sockets to send web form #26845 29/05/03 08:52 AM
Joined: Dec 2002
Posts: 1,922
O
Online Offline
Hoopy frood
Offline
Hoopy frood
O
Joined: Dec 2002
Posts: 1,922
It depends on which method you use, GET or POST. In both cases, you'll have to track down the form elements and build up a data string based of variables and their corresponding, optional values.

Using the GET method is simple:
Code:
var %data = [color:blue]var[/color]=[color:brown]value[/color]&[color:blue]another_var[/color]=[color:brown]value[/color]
 
sockwrite -n $sockname GET /path/file.cgi? $+ %data HTTP/1.1
sockwrite -n $sockname Host: <host>
sockwrite -n $sockname Connection: close
sockwrite -n $sockname

However the POST method is a little bit complicated. You'll have to specify two additional header lines, and the form data is moved to the end of the request, below the ending CRLF:
Code:
var %data = [color:blue]var[/color]=[color:brown]value[/color]&[color:blue]another_var[/color]=[color:brown]value[/color]
 
sockwrite -n $sockname POST /path/file.cgi HTTP/1.1
sockwrite -n $sockname Host: <host>
sockwrite -n $sockname Connection: close
sockwrite -n $sockname Content-Type: application/x-www-form-urlencoded
sockwrite -n $sockname Content-Length: $len(%data)
sockwrite -n $sockname
sockwrite -n $sockname %data

For example, let's take the Search page of our lovely board.

First, we track down the form elements.
Code:
<form method="[color:red]post[/color]"
  action="http://forums.mirc.com/dosearch.php">
  ...
  <input type="hidden" name="[color:blue]Cat[/color]" value="" />
  ...
  <select name="[color:blue]Forum[/color]" class="formboxes">
    <option value="[color:brown]All_Forums[/color]">All Forums</option>
    <option value="[color:brown]CatSearch-1[/color]">*News and Discussions -----</option>
    <option value="[color:brown]latestnews[/color]" >Latest News</option>
    <option value="[color:brown]generaldiscussion[/color]" >General Discussion</option>
    <option value="[color:brown]CatSearch-2[/color]">*Support -----</option>
    <option value="[color:brown]mirchelp[/color]" >mIRC Help</option>
    <option value="[color:brown]connectionissues[/color]" >Connection Issues</option>
    <option value="[color:brown]scriptsandpopups[/color]" >Scripts & Popups</option>
    <option value="[color:brown]CatSearch-3[/color]">*Development -----</option>
    <option value="[color:brown]featuresuggestions[/color]" >Feature Suggestions</option>
    <option value="[color:brown]developerforum[/color]" >Developer Forum</option>
    <option value="[color:brown]bugreports[/color]" selected="selected">Bug Reports</option>
  </select>
  ...
  <input type="text" name ="[color:blue]Words[/color]" size="30" class="formboxes" />
  ...
  <select name="[color:blue]Match[/color]" class="formboxes">
    <option value=[color:brown]"Entire Phrase[/color]">Entire Phrase</option>
    <option value="[color:brown]And[/color]">And</option>
    <option value="[color:brown]Or[/color]">Or</option>
    <option value="[color:brown]Username[/color]">By Username</option>
  </select>
  ...
  <select name = "[color:blue]Old[/color]" class="formboxes">
    <option value="[color:brown]1day[/color]">Newer than 1 day</option>
    <option value="[color:brown]2days[/color]">Newer than 2 days</option>
    <option selected="selected" value="[color:brown]1week[/color]">Newer than 1 week</option>
    <option value="[color:brown]2weeks[/color]">Newer than 2 weeks</option>
    <option value="[color:brown]3weeks[/color]">Newer than 3 weeks</option>
    <option value="[color:brown]1month[/color]">Newer than 1 month</option>
    <option value="[color:brown]3months[/color]">Newer than 3 months</option>
    <option value="[color:brown]6months[/color]">Newer than 6 months</option>
    <option value="[color:brown]1year[/color]">Newer than 1 year</option>
    <option value="[color:brown]allposts[/color]">All posts</option>
  </select>
  ...
  <input type="text" name="[color:blue]Limit[/color]" value="[color:brown]25[/color]" size="3"
  class="formboxes" />
  ... 
  <input type="submit" name="[color:blue]buttsubmit[/color]" value="[color:brown]Submit[/color]"
  class="buttons" />
</form>

Yes I do realize that this is a somewhat tiring work, thus where the form uses the GET request, you can first open it on your browser, and learn the variable names from what it displays in the address bar.

If the POST method is used, the browser won't tell what it sends, but you can however use a packet capturing program such as Ethereal to capture the outgoing HTTP request and learn from it.

For this example, I decided to search for the word "remote" over the "scripts and popups" board one week back. And here's how the script will look like:
Code:
alias form sockopen form forums.mirc.com 80
 
On *:sockopen:form:{
  var %data = [color:blue]Cat[/color]=&[color:blue]Forum[/color]=[color:brown]scriptsandpopups[/color]&[color:blue]Word[/color]s=[color:brown]remote[/color] $+ $&
              &[color:blue]Match[/color]=[color:brown]entire phrase[/color]&[color:blue]Old[/color]=[color:brown]1week[/color]&[color:blue]Limit[/color]=[color:brown]25[/color]&[color:blue]buttsubmit[/color]=[color:brown]submit[/color]
  
  sockwrite -n form POST /dosearch.php HTTP/1.1
  sockwrite -n form Host: forums.mirc.com 
  sockwrite -n form Connection: close
  sockwrite -n form Content-Type: application/x-www-form-urlencoded
  sockwrite -n form Content-Length: $len(%data)
  sockwrite -n form 
  sockwrite form %data
}
 
On *:sockread:form:{
  var %s
  sockread %s
  while $sockbr {
    echo -s -> %s
    sockread %s
  }
}

Paste this into the remote and type /form to begin.

Note: variable names are case sensitive; make sure they are typed correctly.

I hope it helped. If you need help on sending HTTP requests, check this page. Most likely I won't be here until Saturday night, but you're welcome to ask furthermore and hopefully someone else will be able to answer.

Re: using sockets to send web form #26846 29/05/03 04:03 PM
Joined: Apr 2003
Posts: 414
Adrenalin Offline
Fjord artisan
Offline
Fjord artisan
Joined: Apr 2003
Posts: 414
For me easily is to sniff what browser send to the server .. I prefer Iris .. And put that in script ..


mIRC Chm Help 6.16.0.3 Full Anchored!