0
在我的portscanner程序中,我希望成功編寫端口號的輸出,掃描方式和服務名稱。 因此對於每個端口號,被掃描的和服務名稱,我調用下面的parseall例程。xml解析錯誤屬性名稱重新定義
void parseall(int pid, char *scannedby, char *service){ // routine to add port, scannedby and service to xmlfile
xmlDocPtr doc; // pointer to parse xml Document
xmlNodePtr cur = NULL;// node pointer. It interacts with individual node
xmlAttrPtr attr; char portid[10];
sprintf (portid,"%d",pid); // converted int to string
doc = xmlParseFile(xmlFileName); //parse filename
cur = xmlDocGetRootElement(doc); // get rootnode
addnewportinfotag(cur,doc); // this routine adds new portid, scannedby and servicename tags to the xmlfile created
cur = cur->xmlChildrenNode; //get pointer
parseport(doc, cur, portid); // routine to add port to xmlfile
while(cur!=NULL){
if ((!xmlStrcmp(cur->name, (const xmlChar *)"ports"))){
parsehost(doc, cur, scannedby); // routine to add scanned by to xmlfile
parseservice(doc, cur, service); //routine to add servicename to xmlfile
}
cur = cur->next;
}
xmlSaveFormatFile (xmlFileName, doc, 1);
return;
xmlFreeDoc(doc);
}
代碼編譯成功,但是當我掃描一個以上的端口,它提供了一個「XML解析錯誤屬性重新定義名稱 」如下:
[ Port ] [ Scanned by] [ Status ] [Service]
79/tcp osus Open finger
80/tcp bt Open www
111/tcp osus Open sunrpc
xmloutput.xml:5: parser error : Attribute portid redefined
<ports protocol="tcp" portid="79" portid="80"><state state="open" reason="vanill
^
xmloutput.xml:5: parser error : Attribute scannedby redefined
e state="open" reason="vanilla-scan"/><scannedby scannedby="osus" scannedby="bt"
^
xmloutput.xml:5: parser error : Attribute name redefined
"/><scannedby scannedby="osus" scannedby="bt"/><service name="finger" name="www"
^
Segmentation fault
爲它運作良好,單端口給出:
<ports protocol="tcp" portid="22"><state state="open" reason="vanilla-scan"/><scannedby scannedby="bt"/><service name="ftp"/></ports></DPScanner>
嗨馬特,感謝您的快速響應。問題出在功能的某個位置,而不是創建新的標籤並填充端口信息,它只是將下一個端口信息附加到下一個端口信息。請讚賞任何幫助 – Fahad
這是無效的。您不必在同一'ports'標籤上使用'port =「...」'屬性。您需要更改XML文件的結構,以便端口號是子元素,而不是屬性。 – Mat