2011-08-14 63 views
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> 

回答

4

您正在生成無效的XML。在同一個標​​簽上不能有兩個具有相同名稱的屬性。

見規格,在Start-Tags, End-Tags, and Empty-Element Tags

規範性約束:唯一的屬性規格

的屬性名稱不能出現不止一次在同一個起始標籤或空阱元素標籤。

+0

嗨馬特,感謝您的快速響應。問題出在功能的某個位置,而不是創建新的標籤並填充端口信息,它只是將下一個端口信息附加到下一個端口信息。請讚賞任何幫助 – Fahad

+0

這是無效的。您不必在同一'ports'標籤上使用'port =「...」'屬性。您需要更改XML文件的結構,以便端口號是子元素,而不是屬性。 – Mat