#include<iostream>
#define check_bit(var,pos) {return (var & (1 << pos))!=0;}
using namespace std;
int main()
{
uint8_t temp[150]={0x00,0x02,0x17,0xe2,0x1c,0xa8,0x00,0x30,0x96,0xe1,0x8c, 0x38,
0x88, 0x47, 0x00 ,0x01 ,
0x30, 0xfe, 0x00, 0x01 ,0x31, 0xfe, 0x45, 0x00, 0x00 ,0x64, 0x3b, 0x89 ,0x00, 0
x00 ,0xfe, 0x01 ,
0x33, 0x5a, 0xc0 ,0xa8 ,0x79 ,0x02 ,0x0a, 0x0a, 0x0a, 0x01, 0x08, 0x00, 0xe3, 0
x86, 0x00, 0xea,
0x01, 0xd2, 0x00, 0x00, 0x00, 0x05, 0x02, 0x6a, 0x95 ,0x98, 0xab ,0xcd ,0xab, 0x
cd ,0xab, 0xcd,
0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd ,0xab, 0xcd ,0xab ,0
xcd ,0xab, 0xcd,
0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd ,0xab ,0xcd ,0xab ,0
xcd, 0xab ,0xcd,
0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd , 0xab, 0xcd ,0xab, 0xcd, 0xab, 0
xcd, 0xab ,0xcd,
0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd, 0xab, 0xcd , 0xab, 0xcd
};
uint16_t *ptr1=(uint16_t*)&temp[0];
while(!(*(ptr1+0)==0x88 && *(ptr1+1)==0x47))
{
ptr1++;
}
cout<<"MPLS packet";
uint32_t *ptr2=(uint32_t*)&temp[0];
cout<<"4 bytes accessed at a time";
ptr2++;
while(check_bit(*(ptr+3),7)!=1)
{
cout<<"bottom of the stack:label 0";
ptr2++;
}
cout<<"mpls label:1";
return 0;
}
方案的目的,以識別由在一個時間訪問兩個字節,並檢查88級47的數據包的存在,並且如果MPLS分組的分組是MPLS或不那麼它應該一次訪問四個數據包,並檢查第三個字節(在這種情況下是30)是否啓用。如果未啓用,則訪問接下來的四個字節並檢查字節是否啓用。我編寫了程序,但它不工作。請人幫我,我是不能夠訪問的array.if我給cout<<temp[0]
它給垃圾值單個元素如何檢查位被允許或不以十六進制數字的陣列
請幫
'ptr1'是一個指向'uint16_t'的指針,所以'+ 1'將地址增加**兩個**字節。只需取消劇組,並將'ptr1'設爲'uint8_t *'。另外,誰是'ptr'? –
只需搜索0x8847來識別MPLS數據包就相當有風險。這個序列很可能以某種方式隨機出現在數據包中,導致錯誤的檢測。你應該實際上'解碼'堆棧直到IP頭部。 – KillianDS
要將'temp [0]'等字節輸出到'cout',您需要首先將其轉換爲int。否則,它會嘗試將其顯示爲可打印的字符。 – interjay