QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2622|回复: 0
打印 上一主题 下一主题

Asp.net编写的PING工具

[复制链接]
字体大小: 正常 放大
sskke        

2

主题

0

听众

19

积分

升级  14.74%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-4-14 15:37 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>    Asp.net编写的PING工具
/ y) g* |9 I" R" G" @: g     
" Z4 G, I2 c% f- g     ' ~5 I# E: q* l% g
    PING 是一个用来检测网络连接速度的工具,它会在本机和给出的远程主机名之间建立一个SOCKET 连接并向其发送一个ICMP协议格式的数据包,然后远程主机作出响应,发回一个数据包,通过计算发送到接收数据包的时间间隔,我们可以确定连接的速度。 * ~) {, V( [8 u
     
4 t8 B! G( W# S- S     : G$ Z/ ?  v0 C: n: H
     + ~# Y( ]5 w9 O) O7 M: O  N
     此程序可以使用于 asp+asp.net 虚拟主机,时代互联(<a href="http://www.now.net.cn" target="_blank" >www.now.net.cn</A>)的虚拟主机可以支持 。虚拟主机的其他的配置问题,可以见:<a href="http://www.now.net.cn/host" target="_blank" >www.now.net.cn/host</A>
* D& a' B4 P! `! u9 ?/ a     主机+域名+邮箱 的优惠套餐,可以见 : <a href="http://www.now.net.cn/special/host.net" target="_blank" >http://www.now.net.cn/special/host.net</A>
8 a- h, c7 ?  n2 C4 L% b     5 A1 B( Q5 m/ y: p, G  c
     " `! H! b5 _5 ~. i, ^
     
8 u1 e3 d+ w& g. c    使用方法 ping &lt;hostname&gt; [/r] : b! J7 B5 I. ?( m3 n' p
     8 D+ ~3 U* K" ?5 n( u
    &lt;hostname&gt; 主机名 , Z/ a: C. C5 b8 d. ^+ i/ M
     . I' V% f: L% a) o7 N/ @
    [/r] 可选属性,决定是否连续的 ping 远程主机。 $ K: v" D. w! C1 f' ]" u
     
" @* k6 X* }" I5 v% Y3 v+ |1 Z; @" d     - i6 @- i& u, j, Q% Z( g& V
    下面是代码: : ^' b( R. K3 F
     
+ ], s8 f+ {0 A( c    ///ping.cs
, ?; K" @( Q8 R/ d/ |     
9 f5 |- t: s* m! ]4 W+ L. e( ~6 h" g$ \    namespace SaurabhPing
( O: q: ?  ?. S( \, w+ p+ n  u; E     2 g+ {9 \+ e" u& Q
    { 4 R( t8 {" Z, [; @8 w
     * q1 T9 @' V" |- Y  ~
    using System; 4 y9 v  H3 q- M, l
     ' i7 b, i& u  t/ V( T
    using System.Net; $ m  U; o5 b& d+ E. q" z
     
& }1 z. N7 S+ \1 z1 N  c' x+ o    using System.Net.Sockets;
% w% o- Q( S0 i$ G9 p     
6 O# F* @; H' m% H" C) l% m- F    /// &lt;summary&gt; 8 |# I' M" s% s/ W
     - \0 s+ L$ V' v3 B% D, G' R: L
    /// 主要的类:ping
2 p, k4 D0 l3 B5 O$ U* Y     
1 h3 ]* o3 I" }) {    /// &lt;/summary&gt; ( g9 o( h5 v$ P# n; B2 P- a6 A
     ' A0 q% L1 B1 P9 u, o
    class Ping
8 S) h7 _. o1 f# I+ ~     7 s3 q( ]  [# `
    { 8 P# O6 \$ i; u6 I- ~' V+ V
     
$ g5 C6 R* \4 `2 H8 G$ L9 j    //声明几个常量
) t. n+ S# j: ]     ' e3 G0 m8 l5 {6 L% M
    const int SOCKET_ERROR = -1;
5 D' a* ~" l4 ?3 D     # Z# m2 T8 ^& ]5 _5 {6 M
    const int ICMP_ECHO = 8; & M3 J9 u4 O8 B" I8 ~2 Z
     3 S" ?# j3 P+ p  @* S. g. B" W7 @
    /// &lt;summary&gt; 7 ^  z: Y1 z% D; `; J0 [5 z& E
     
) v9 w9 E( [2 g1 \4 R4 a6 w    /// 这里取得Hostname参数 4 f9 \* O6 u) t
     & v( h* x6 j4 ^$ l0 z& t0 i
    /// &lt;/summary&gt;
9 k% k+ J5 F0 _* d     ( a, ~9 H/ x5 B9 [5 C
    public static void Main(string[] argv) 0 D+ h! M9 i# ~7 |
     + Z. k) m, [$ o! k! A
    {
+ r" b0 y3 \& P/ {     ( v7 g. t- q+ I5 }8 f
    if(argv.Length==0) 3 }5 V9 P9 X; N) J0 r
     ; y& e7 x. E' `+ g2 M. g8 g+ M: _
    { % ]+ u& }8 v+ b
     3 y. J* G. I$ |& }0 h7 Y
    //If user did not enter any Parameter inform him
2 i' _3 z7 y7 m% H     
2 r& q3 q+ H* w/ f' \; }5 R7 U    Console.WriteLine("Usageing &lt;hostname&gt; /r") ; 0 s0 v  t7 S5 ?# G8 }; ?# L
     5 T2 L. P" L8 _) ^# V1 l
    Console.WriteLine("&lt;hostname&gt; The name of the Host who you want to ping"); ! q9 b7 ]* w7 q, v: S, g
     6 {( t0 l6 G0 z7 I) L
    Console.WriteLine("/r Ping the host continuously") ; 8 f% \$ ~: K2 f( [3 c& S
     
$ e# ~; S* e# L$ Z: A0 e    }
1 V" H" {% I& _     / }/ }( L7 o3 [* i( i2 B2 N: h
    else if(argv.Length==1) ' F( {0 G1 D# s6 u& z
     # S- {2 _! `- E3 I$ S
    {
. j0 K! v  q' Q0 [- u! A     5 n! Q( T, j* A) ^. I  ?- r2 F/ q
    //Just the hostname provided by the user 1 V& y: `4 G* p2 r) j6 R
     2 v& H, ?4 m1 f
    //call the method "ingHost" and pass the HostName as a parameter
7 C) m9 c( Y* `" L     + N- g5 U2 D9 p1 F
    PingHost(argv[0]) ;
* H' O$ P1 o1 l3 m5 k     
8 \$ y1 m) ?  S0 t/ C    }
/ N  M" }! C  P     " L; p7 \% v# T
    else if(argv.Length==2) ! E% ~9 O# _) A. E
     
# `- W3 |7 N# L% A9 O    {
$ ?4 r; Y. p8 s! K: z: \; J     
/ q0 {$ R- C& h* y5 L- y8 T    //the user provided the hostname and the switch
! j% _2 h% |+ X     ( ?) ^/ l. e, J  N/ W8 l
    if(argv[1]=="/r") ( _3 E) J) P4 k2 Q" r) k( @: h6 M, _
     & Y- P1 g) L, W- e
    { 1 b  |/ S; |) D% z/ V9 c3 [  R
       Q4 d% s; v7 Y& u+ r
    //loop the ping program , Z. X4 U4 r( M7 \2 t- ~/ q
     
3 Y+ K9 M# S  j, a    while(true) : F) W9 z7 }" G$ P
     
/ d0 E# z- Z8 t8 V- h    {
0 s4 t0 d6 x: W& D/ B  o# W     " H1 [9 F$ e' L+ V. ~# ^' Z
    //call the method "ingHost" and pass the HostName as a parameter
, Q' ]: H2 _+ m* x     
8 k7 {+ u6 s9 J" k+ |7 q    PingHost(argv[0]) ;
7 z3 e+ p5 r+ X: R0 @4 ]! |     # K# `$ ]# P# l" B' t2 A
    } 0 D( ~& h+ B) n- S' e, s0 u- V
     
8 `( m  d  w* f    } 9 a  h  `, H5 }
     
2 h- d! e/ G) X# |- D7 E    else
& M! z$ }# W/ U, L# L     
9 q9 `9 a9 ^* T2 F    { $ K( l& K, [$ E$ m) m
     - ?0 T! H# |! C+ {6 @- H. O) {0 A
    //if the user provided some other switch , G/ X( `  Y  X5 |7 V& h/ V+ W# Y
     
5 a. O6 y" K6 C. V    PingHost(argv[0]) ; ' M! v- `9 ?% }  c% f8 y
     4 F7 x1 m" f3 P! e2 ?. P! f
    }
$ n4 B6 R  B& W     
9 F2 W' B- ^7 B    } ) s6 t# D# j8 H8 c
     # N0 t- G# |4 L- B: l4 K5 {! l
    else
% |. F# f! ?( @     9 @, g, b4 P" T
    { * f7 {( M5 I# P1 C
     
% s  G7 ]7 }: o    //Some error occurred
) T/ P5 y) L& M5 a/ M  U3 u     
& l  k4 W; U( s1 F: j; K    Console.WriteLine("Error in Arguments") ; 8 {2 H. w" |4 A, I8 ~
     
3 t7 r" r6 Y+ j% S# I    } 9 B0 P4 ?7 c7 V6 H: u0 M8 b
     7 x- y8 R  s7 U, V: k/ H* N
    } ! J8 B" F( b# I
     
1 [' _3 P/ G" _8 h+ p& F1 F9 p     8 ^( q9 E) A& H3 L3 c1 ^( S$ K
    /// &lt;summary&gt;
& h8 a! G  ^1 a9 r' }; m     1 d5 Z. E' Y+ U, r
    /// 主要的方法,用来取得IP,
8 F" `% M  p/ H" W     
1 }0 A& D5 S$ k. E! L    /// 并计算响应时间
! q6 E: _  e- t" |% @     4 D6 N4 E9 Y& {7 h; Z7 V; ?* p
    /// &lt;/summary&gt; / J* p0 [9 `0 N5 ?
     
! L1 X- F8 g! ^  q1 H3 Z    public static void PingHost(string host)
7 H8 }- W8 @, p! A6 N1 V: a     & U; C- j( U1 f
    { ; d5 Y9 K1 a1 R, Q2 n
     
* _: D4 w# c9 t    //Declare the IPHostEntry 9 V7 M- e  S7 P
     4 L) o5 e" I; P4 U( K( l
    IPHostEntry serverHE, fromHE; / g7 c; `( x$ O3 r. ?( C9 u
     6 Q7 {  l0 j7 x/ A6 e! E7 {7 Q
    int nBytes = 0; 3 ?2 p! o; L# Q4 Q  ]
     ' ]2 g$ c) x) F( p
    int dwStart = 0, dwStop = 0;
8 M% n( t7 y: l6 o; P     
( r4 K+ c- k5 [2 e) b' y. \2 O$ z    //Initilize a Socket of the Type ICMP
2 M: Y0 U; E% t% _/ e0 C! C( ?4 y3 T' ^     
1 @4 K6 h- O7 r: F+ R( `    Socket socket =
; C( _* y" ]" {& ?* _) X! R$ K; }4 ]     
. Z! f; B# _3 ^- [; q  ?* K    new Socket(AddressFamily.AfINet, SocketType.SockRaw, ProtocolType.ProtICMP);
! k% \% |/ v; ^% u; B- }1 d     
& L, ~$ N4 v* O: z4 r2 D     
3 x& Y9 n/ @# m4 S$ _  _0 [    // Get the server endpoint
/ P' c2 n8 \- m/ G/ _# R2 ~- g     : G+ H0 r# T+ \0 L% P  N# J
    try
/ k1 b  q8 t; b' y; L- N     % s0 _1 p1 v, d& P
    {
3 }/ \0 [. e$ e     . E8 |, m0 m/ e( ]
    serverHE = DNS.GetHostByName(host);
( u% ]) V8 i  L, V: A' ]     8 i. x) x* Q/ X% L7 y+ ]
    } 6 }0 @  D1 h( V! r6 U: V& Y
     - U' r( m# M- V; ?
    catch(Exception)
" o7 z8 M- D% X  d6 u     8 c3 z/ x) Y' D9 Q& K5 r6 O" z
    { 5 A2 }5 `# b. d+ P/ C+ `
     ! W  {- y* \1 l
    Console.WriteLine("Host not found"); // fail % l4 N6 M# z7 d: x2 h3 {1 z5 r! n
     
  E/ u' |4 p3 M5 [& Y/ |    return ;
! {4 ^5 H; Z* C7 D% j# J     
) _/ `8 Q9 R" v, M2 {    } # E: G5 E( ^; G1 ^! \& w' [
     + j. m: _0 f& N3 X+ p9 {: V
     * ^/ n& O- [, A5 Y. P) X7 @
    // Convert the server IP_EndPoint to an EndPoint
% r( e: O' E7 E! x/ N& v$ t3 I( n' |     $ b$ Y3 X! J2 `* [! A0 v
    IPEndPoint ipepServer = new IPEndPoint(serverHE.AddressList[0], 0); - `( K2 E; x" o1 \# P. {
     ; y( A4 Z) A% F9 J) i
    EndPoint epServer = (ipepServer);
$ M8 }# Q" C1 v3 D  [. q# O9 {9 j2 T     3 O/ B9 j7 p+ \$ T$ t; ~6 V5 b
     7 w: ]: H6 C: n9 ]
    // Set the receiving endpoint to the client machine
6 B' M- j; c, j9 m  e     
8 g; h4 }- k* S/ |    fromHE = DNS.GetHostByName(DNS.GetHostName()); % n* K6 b; E0 K1 c, w& j* l
     
# s: l/ h0 l$ m' x9 v6 i    IPEndPoint ipEndPointFrom = new IPEndPoint(fromHE.AddressList[0], 0);
7 p' d. F# c& d8 M0 j* F0 ~     
7 m% A: \% F$ d/ A    EndPoint EndPointFrom = (ipEndPointFrom); ) m8 u) C# Q# S" L3 K* W- Q
     
$ ]. I- D% M/ g' U9 w     
, b1 n% r8 u& h8 ~1 H    int PacketSize = 0; 4 ?2 s  w7 i' i
     ! N! Z, A% s: ]" R  e" e, P. W5 G
    IcmpPacket packet = new IcmpPacket();
+ ^# ?6 H% N( ?# N, ]& K( N1 H     
2 U$ L) R4 B$ t9 Y0 v$ L, x    // Construct the packet to send
8 [# V: g# @2 N. k* R( F     
# T( V7 e* ?3 j! J    packet.Type = ICMP_ECHO; //8 : X+ E5 \* f+ Y, A' G5 l
     
+ i( S2 E- o6 ^+ j* d% j+ m: k    packet.SubCode = 0;
2 i8 O; y9 ]4 J( R3 f( g1 v     0 D) i: N6 `" o7 Q6 h
    packet.CheckSum = UInt16.Parse("0"); % g* ?  v( N) I6 N2 R
       j. B$ _  d4 {% x
    packet.Identifier = UInt16.Parse("45");
; F! Y5 A- z) j- k; G8 n* M+ L: u! P  t     
$ W; \1 l6 ^- D    packet.SequenceNumber = UInt16.Parse("0"); + u3 U0 v) T$ m1 w( o
     
* l5 X# S1 I1 j+ J    int PingData = 32; // sizeof(IcmpPacket) - 8; 3 {% d: L* e8 j8 }
     
' F2 X0 c% N7 e( X  g% Q    packet.Data = new Byte[PingData];
7 }$ ^$ q' {" R& W9 k     : @% E! ]4 T" q. ^9 u6 w
    //Initilize the Packet.Data
9 l0 N/ H) L1 N, Y4 T8 q     
, F  ~" J+ H% [    for (int i = 0; i &lt; PingData; i++) ! L% a9 r8 h& |) ^# U: L
     3 F2 C; M& ^2 Y8 d% @! Q! N; @
    { 9 x" T9 B* v/ b* J
     , Q2 p9 p$ w+ K8 u7 d
    packet.Data = (byte)'#';
% d2 U% F  j0 i+ I     , }$ M6 z% u2 K) \+ R+ w8 D" q
    }
: @3 a( E6 v. N6 {  m/ B     
% q  Q2 B) j, ?; }; _3 j     1 J. W" t) R" S  J. c
    //Variable to hold the total Packet size
* |" {  |; X5 O- O! i/ N     . }6 _# }5 u' F7 S- L; D2 n
    PacketSize = PingData + 8; ( F  O8 i1 `) S' w
     
! D( q3 B1 S: i/ a: w    Byte [] icmp_pkt_buffer = new Byte[ PacketSize ];
# u5 q4 E$ W2 N4 d' d, G6 ]     
3 u0 \& h9 ^! n: u/ U$ ~* K    Int32 Index = 0;
2 e. ?4 o0 G. D4 k; [       r) b9 a" P8 g5 ?5 L* e
    //Call a Method Serialize which counts
' _  H8 _; ^0 K7 C& k& t/ ^. O     
) C% y8 q, j! M6 c    //The total number of Bytes in the Packet
8 \4 U+ H7 G+ O4 f     
6 |% x8 R+ z" d; B( d  r    Index = Serialize( : T0 o2 R  [1 d8 V3 A
     
6 C) h+ T* w* ]4 [7 I5 s5 o    packet,
; A$ F+ F8 ^$ |+ b     ; G" t) O3 q$ e
    icmp_pkt_buffer, - V* V. C' R) @4 u; D
     
; x: n9 b  i' [+ ~/ Y, T, [    PacketSize, / Q5 t, K8 Q1 R8 h  U9 _4 a
     2 m/ U. C' v: W9 ?* U* S
    PingData ); - X$ s- R5 x9 a7 A$ {
     
( n1 M7 }7 m4 {7 M6 o# K  a2 m    //Error in Packet Size ! S( m2 K7 Q7 R7 [9 H
     ! s  G" ~3 ?: I! ~* C
    if( Index == -1 ) 7 L  ]* w% J: R  {2 K+ I
     
3 W  j8 G( v8 E2 e! y6 e9 m* M    { ' L4 w7 \  t+ m/ w/ q
     
& F6 ~# K& [1 J5 L# V, C- l    Console.WriteLine("Error in Making Packet"); & G7 u- S( `! g( N% S
     , M5 l! e# O# G6 n
    return ; 7 ^9 d3 X9 h7 F/ Y/ r% N* s1 V
     5 ?( x7 n) V: D! s
    } 8 T6 R- k- d% S6 Y- l
     $ C& z/ F9 r8 _; J. D0 X& W
     
# ]3 l- N' B- R$ S4 @    // now get this critter into a UInt16 array
$ k: K) f7 r, Y/ M" v8 w     
3 S! u5 ~6 m/ d6 c% J3 g     
( u5 |* h; }! t% O9 s2 N    //Get the Half size of the Packet
5 @1 N. O" g( M) K% L2 m. I     : I2 Q% T; I+ N9 t; }
    Double double_length = Convert.ToDouble(Index);
! B3 p* w& p6 ?7 B     ( m" M1 T/ F  [: d. m7 m5 r2 v1 @6 U
    Double dtemp = Math.Ceil( double_length / 2); * ^+ G. E! Z, r+ n
     
  z. u  ~/ E) O* M    int cksum_buffer_length = Convert.ToInt32(dtemp); * Z7 o$ W7 D$ _
     2 P+ Q7 e: |1 S' e, R
    //Create a Byte Array 7 S( D4 n5 ^: ~) v5 n; F
     
" F  u* S$ \* G. z# X7 Y( F- j    UInt16 [] cksum_buffer = new UInt16[cksum_buffer_length]; 9 s5 @: z/ N' e
     " r2 f! f$ J: d2 F) A
    //Code to initialize the Uint16 array 7 \: P8 Y! C4 O# X2 n) V5 J
     
' S! H9 w9 r6 Z) Q. D. n    int icmp_header_buffer_index = 0; # R1 {+ J- M' e" D5 o0 W
     + d% H8 _6 b" d; X0 `
    for( int i = 0; i &lt; cksum_buffer_length; i++ ) {
+ s) T- ~; e! X. A" j     
2 ^9 y8 h7 u0 t! v1 J    cksum_buffer =
1 ~2 N, Z8 i: W. Q     : X3 ]; ]' m5 D0 B9 i
    BitConverter.ToUInt16(icmp_pkt_buffer,icmp_header_buffer_index); $ g& V8 u  t7 G1 X/ c
     
8 |0 Q. S. [( p/ H+ D& p+ `    icmp_header / d. K7 Z7 _! L5 X- d) j
     
1 N! y7 R# G1 F. L- R    以上代码可以直接在时代互联的ASP+ASP.NET 虚拟主机上直接运行,欢迎试用 !到<a href="http://www.now.net.cn/host" target="_blank" >www.now.net.cn/host</A> 订购后可试用 !
! X6 n  A* d  u     ! ~$ O: P; |, E
     关于ASP+ASP.NET高速虚拟主机,也有同时支持JSP(JAVA) 和PHP的综合虚拟主机。也可以试用,其他问题可以有免费网络电话咨询,
! R0 ?+ `4 @% u9 l& A" {+ n     欢迎随时联系 <a href="http://www.now.net.cn/customer/moreline.net" target="_blank" >http://www.now.net.cn/customer/moreline.net</A> </P>
. n9 g  D6 E+ m8 e<>时代互联(<a href="http://www.now.net.cn" target="_blank" >www.now.net.cn</A>) 的虚拟主机,免费配有 CDN 镜象网络加速 ,送域名 邮箱,流量访问系统,留言版,计数器!
. e2 z* I* b" P  L( c+ D5 n     - Q3 D1 @, U) I+ P% p
    虚拟主机在线订购试用,请到: <a href="http://www.now.net.cn/host" target="_blank" >http://www.now.net.cn/host</A> 4 r: w. D9 C+ w* [
    域名+空间的优惠套餐可见 : <a href="http://www.now.net.cn/special/" target="_blank" >http://www.now.net.cn/special/</A> 7 I: [+ F, d; y. b+ W& ?
     
2 J  I0 P) w" W. V  P    如有问题要咨询,时代互联提供免费咨询电话,点击这里: <a href="http://www.now.net.cn/customer/moreline.net" target="_blank" >http://www.now.net.cn/customer/moreline.net</A>
# I( o3 w" E' _* V    QQ 联系 :405881840 108786612 </P>
  J: \4 T) C6 k: n<>----------------------------------------------------------------------------------------------------------------------------</P>$ o5 d7 u  S2 U+ i& D# H
<>
4 z" V  E1 D+ t/ z1 V5 V, w       主机租用,折上有礼,租用9折优惠加送价值3600的CDN 主机加速器 !详情见: <a href="http://www.todayidc.com" target="_blank" >http://www.todayidc.com</A> / E7 J1 h8 s6 c  G
     
- C! F& @* |; Q9 P. b3 d5 S    企业邮局—— 立企业的统一形象,自由增加帐号 划分大小,不限制附件大小,繁、简、英3种界面智能显示。强大Anti-SPAM反垃圾邮件使用专业杀 引擎Anti-VIRUS,在线实时自动杀  ,价 超低! <a href="http://www.now.net.cn/email/" target="_blank" >http://www.now.net.cn/email/</A> * c1 J, q% m# ~9 n! e0 l
     
( p9 \& P2 [  ]9 b3 E    智能建站——3分钟就建立了数据库功能的网络交易平台,只要填写公司的资料或图片,就可建成网站。免费试用到 : <a href="http://www.now.net.cn/auto/" target="_blank" >http://www.now.net.cn/auto/</A>
) E4 c1 x5 v' A' ]     
  ?& a! x  H' y% e- E9 c    繁简通—— 300 元就给你一个完全同 的繁体网站,方便开拓 外市场!免费试用到: <a href="http://www.now.net.cn/fjt/" target="_blank" >http://www.now.net.cn/fjt/</A> ' h8 d& q- D/ M- `
     7 ]6 T+ I6 ?/ Y7 {$ h2 Z" |6 W
    动态域名——380元 就可以在公司里建立一个可以固定访问的服务器,可以应用于保密的资料服务器,视频服务器,网站服务器,邮件服务器,免费试用到: <a href="http://www.now.net.cn/cyberip/" target="_blank" >http://www.now.net.cn/cyberip/</A>  </P>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-6-17 02:39 , Processed in 0.438917 second(s), 57 queries .

回顶部