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();