in reply to remote os
Another option would be Nmap::Scanner
Update:This module can do the finger printing as well via its guess_os() method. $scanner->guess_os();