Windows Mobile Ping 命令實現

2021-09-05 02:07:18 字數 1990 閱讀 2909

最近在實施msn direct專案時,需要用***+adsl方案把放在西格瑪的伺服器和電視塔上的發射裝置連線在一起,為了測試網路是否正常,需要兩邊的人進行配合,通過ping命令判斷網路是否聯通。由於電視塔僅周二下午才允許除錯,除錯時間有限,並且人手也有限,為了節省時間,所以萌生了做乙個windows mobile ping 命令的想法,這樣通過手機就可以直接測試網路是否聯通。

windows mobile是沒有現成的ping可用的,所以需要自己做乙個。一種最直接的想法就是用socket實現icmp協議(針對ping命令的部分),對於桌面版的.net framework中的socket,只要如下進行定義,就可以是實現收發icmp資料報。

socket socket = new socket(addressfamily.internetwork, sockettype.raw, protocoltype.icmp); 

但是很不幸的是.net compact framework不支援protocoltype.icmp引數,所以也無從用socket實現了。幸好天無絕人之路,windows mobile還提供了icmp的api介面,可以通過這些api介面,實現ping命令的功能,核心**如下:

public

class sw  

[structlayout(layoutkind.sequential, charset = charset.auto)]  

private struct icmp_echo_reply  

#endregion  

public

static

int ping(string ip, int timeout,out string info)  

int result = -1;  

intptr icmphandle;  

int32 iip;  

string sdata;  

ip_option_information oicmpoptions = new ip_option_information();  

icmp_echo_reply icmpreply = new icmp_echo_reply();  

int32 ireplies;  

icmphandle = icmpcreatefile();  

iip = bitconverter.toint32(host.address.getaddressbytes(), 0);  

sdata = "abcdefghijklmnopqrstuvwxyz012345";  

oicmpoptions.ttl = 255;  

ireplies = icmpsendecho(icmphandle, iip, sdata, (int16)sdata.length, ref oicmpoptions, ref icmpreply, marshal.sizeof(icmpreply), timeout);  

if (icmpreply.status == 0)  

else

icmpclosehandle(icmphandle);              

return result;  

}  }  

最終程式執行後的介面如下:

需要注意的是,gprs連線必須是cmnet(關於如何建立gprs連線,有興趣的朋友可以參考我以前寫的文章:讓智慧型手機和居家電腦互聯互通(wm6 gprs)),否則是無法ping通公網ip的,此外我們發現windows mobile手機的ip為10.x.x.x,我們知道10開頭的ip位址是a類位址,查相關資料,我們可知10.0.0.0到10.255.255.255是私有位址(所謂的私有位址就是在網際網路上不使用,而被用在區域網路中的位址)。每個a類位址理論上可連線16777214臺主機,這大約是1千六百萬臺,這也是同時使用gprs的手機數上限了。由於windows mobile手機分配的ip位址不是公網ip,所以很遺憾,我們不能在pc上ping  windows mobile手機,也就無法測試pc的ping出命令是否正常了。[葉帆工作室]

Kafka命令實操

如果對kafka基本概念不了解,建議先學習一下一些名詞的含義 附上 kafka入門和高階 建立主題 建立了乙個test主題 bin kafka topics.sh create zookeeper 虛擬機器ip 2181 replication factor 2 partitions 1 topic...

Linux實操命令

vi命令 3.vi 檔案後 set nu 則顯示檔案的行號 4.vi 檔案後 g是跳到檔案尾部 gg是跳到首行 nohup 不結束通話地執行命令 關閉終端 1.nohup command 2.在當前終端介面檢視執行的後台程序 jobs l 3.關閉終端重新開啟終端檢視執行的後台程序 ps ef gr...

linux實訓 歷史命令

介紹 wget 裡面記錄是一些命令的記錄,現在需要你從裡面找出出現頻率次數前3的命令並儲存在 home shiyanlou result。目標 處理文字data 將結果寫入result 結果包含次數和命令,如 100 ls 提示 cut擷取 c 8 明白含義嗎 uniq dc去重 sort 的引數選...