As far as I know if someone is running a program to crawl your web site, in such a case user-agent header may not be set.
Even some web stripping software may allow to change the user-agent and even not set it.
It could also be some one is running a malicious program to scrape your site.
It could be someone is running a diagnostic program checking your site.
It could be a search engine indexing your site (I think most search engines would include some kind of identification in the user-agent header).
The http 1.1 specification says "User agents SHOULD include this field with requests."
The
link is here
There could be other reasons why such a thing could happen..