Some search engines add query string data to their links so you can determine the keywords used from that referring URL. For example, Google uses something like:
A lot of log analyzers (WebTrends, LiveStats, etc.) use that info. You just have to know the format each search engine uses.
Request.ServerVariables("REMOTE_ADDR") will give you the IP address of the user, or at least the IP address of his or her ISP. Those are assigned by Internet Registries so you can look them up to determine who owns them and what country they are based in. http://www.arin.net
is a good place to start. Again, some web log analyzers can look those up automatically.
The browser user agent string typically includes the browser's language. Problem is, every browser uses a different format so it's hard to parse programatically.