⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 service_scan.h

📁 Ubuntu packages of security software。 相当不错的源码
💻 H
📖 第 1 页 / 共 2 页
字号:
  char *servicename;  int matchtype; // SERVICEMATCH_REGEX or SERVICESCAN_STATIC  char *matchstr; // Regular expression text, or static string  int matchstrlen; // Because static strings may have embedded NULs  pcre *regex_compiled;  pcre_extra *regex_extra;  bool matchops_ignorecase;  bool matchops_dotall;  bool isSoft; // is this a soft match? ("softmatch" keyword in nmap-service-probes)  // If any of these 3 are non-NULL, a product, version, or template  // string was given to deduce the application/version info via  // substring matches.  char *product_template;  char *version_template;  char *info_template;  // More templates:  char *hostname_template;  char *ostype_template;  char *devicetype_template;  // The anchor is for SERVICESCAN_STATIC matches.  If the anchor is not -1, the match must  // start at that zero-indexed position in the response str.  int matchops_anchor;// Details to fill out and return for testMatch() calls  struct MatchDetails MD_return;  // Use the six version templates and the match data included here  // to put the version info into the given strings, (as long as the sizes  // are sufficient).  Returns zero for success.  If no template is available  // for a string, that string will have zero length after the function  // call (assuming the corresponding length passed in is at least 1)  int getVersionStr(const u8 *subject, int subjectlen, int *ovector, 		  int nummatches, char *product, int productlen,		  char *version, int versionlen, char *info, int infolen,                  char *hostname, int hostnamelen, char *ostype, int ostypelen,                  char *devicetype, int devicetypelen);};class ServiceProbe { public:  ServiceProbe();  ~ServiceProbe();  const char *getName() { return probename; }  // Returns true if this is the "null" probe, meaning it sends no probe and  // only listens for a banner.  Only TCP services have this.  bool isNullProbe() { return (probestringlen == 0); }  bool isProbablePort(u16 portno); // Returns true if the portnumber given was listed                                   // as a port that is commonly identified by this                                   // probe (e.g. an SMTP probe would commonly identify port 25)// Amount of time to wait after a connection succeeds (or packet sent) for a responses.  int totalwaitms;  // Parses the "probe " line in the nmap-service-probes file.  Pass the rest of the line  // after "probe ".  The format better be:  // [TCP|UDP] [probename] "probetext"  // the lineno is requested because this function will bail with an error  // (giving the line number) if it fails to parse the string.  void setProbeDetails(char *pd, int lineno);  // obtains the probe string (in raw binary form) and the length.  The string will be   // NUL-terminated, but there may be other \0 in the string, so the termination is only  // done for ease of printing ASCII probes in debugging cases.  const u8 *getProbeString(int *stringlen) { *stringlen = probestringlen; return probestring; }  void setProbeString(const u8 *ps, int stringlen);  /* Protocols are IPPROTO_TCP and IPPROTO_UDP */  u8 getProbeProtocol() {     assert(probeprotocol == IPPROTO_TCP || probeprotocol == IPPROTO_UDP);     return probeprotocol;    }  void setProbeProtocol(u8 protocol) { probeprotocol = protocol; }  // Takes a string as given in the 'ports '/'sslports ' line of  // nmap-service-probes.  Pass in the list from the appropriate  // line.  For 'sslports', tunnel should be specified as  // SERVICE_TUNNEL_SSL.  Otherwise use SERVICE_TUNNEL_NONE.  The line  // number is requested because this function will bail with an error  // (giving the line number) if it fails to parse the string.  Ports  // are a comma separated list of ports and ranges  // (e.g. 53,80,6000-6010).  void setProbablePorts(enum service_tunnel_type tunnel,			const char *portstr, int lineno);  /* Returns true if the passed in port is on the list of probable     ports for this probe and tunnel type.  Use a tunnel of     SERVICE_TUNNEL_SSL or SERVICE_TUNNEL_NONE as appropriate */  bool portIsProbable(enum service_tunnel_type tunnel, u16 portno);  // Returns true if the passed in service name is among those that can  // be detected by the matches in this probe;  bool serviceIsPossible(const char *sname);  // Takes a string following a Rarity directive in the probes file.  // The string should contain a single integer between 1 and 9. The  // default rarity is 5. This function will bail if the string is invalid.  void setRarity(const char *portstr, int lineno);  // Simply returns the rarity of this probe  const int getRarity() { return rarity; }  // Takes a match line in a probe description and adds it to the  // list of matches for this probe.  This function should be passed  // the whole line starting with "match" or "softmatch" in  // nmap-service-probes.  The line number is requested because this  // function will bail with an error (giving the line number) if it  // fails to parse the string.  void addMatch(const char *match, int lineno);  // If the buf (of length buflen) matches one of the regexes in this  // ServiceProbe, returns the details of the match (service name,  // version number if applicable, and whether this is a "soft" match.  // If the buf doesn't match, the serviceName field in the structure  // will be NULL.  The MatchDetails returned is only valid until the  // next time this function is called.  The only exception is that the  // serviceName field can be saved throughought program execution.  If  // no version matched, that field will be NULL. This function may  // return NULL if there are no match lines at all in this probe.  const struct MatchDetails *testMatch(const u8 *buf, int buflen);  char *fallbackStr;  ServiceProbe *fallbacks[MAXFALLBACKS+1]; private:  void setPortVector(std::vector<u16> *portv, const char *portstr, 				 int lineno);  char *probename;  u8 *probestring;  int probestringlen;  std::vector<u16> probableports;  std::vector<u16> probablesslports;  int rarity;  std::vector<const char *> detectedServices;  int probeprotocol;  std::vector<ServiceProbeMatch *> matches; // first-ever use of STL in Nmap!};class AllProbes {public:  AllProbes();  ~AllProbes();  // Tries to find the probe in this AllProbes class which have the  // given name and protocol.  It can return the NULL probe.  ServiceProbe *getProbeByName(const char *name, int proto);  std::vector<ServiceProbe *> probes; // All the probes except nullProbe  ServiceProbe *nullProbe; // No probe text - just waiting for banner  // Before this function is called, the fallbacks exist as unparsed  // comma-separated strings in the fallbackStr field of each probe.  // This function fills out the fallbacks array in each probe with  // an ordered list of pointers to which probes to try. This is both for  // efficiency and to deal with odd cases like the NULL probe and falling  // back to probes later in the file. This function also free()s all the  // fallbackStrs.  void compileFallbacks();  int isExcluded(unsigned short port, int proto);  struct scan_lists *excludedports;    static AllProbes *service_scan_init(void);  static void service_scan_free(void);protected:  static AllProbes *global_AP;};/**********************  PROTOTYPES  ***********************************//* Parses the given nmap-service-probes file into the AP class Must   NOT be made static because I have external maintenance tools   (servicematch) which use this */void parse_nmap_service_probe_file(AllProbes *AP, char *filename);/* Execute a service fingerprinting scan against all open ports of the   Targets specified. */int service_scan(std::vector<Target *> &Targets);#endif /* SERVICE_SCAN_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -