[405] 2021-07-24_Go扫描器分析

文档创建者:s7ckTeam
浏览次数:3
最后更新:2025-01-16
2021-07-24_Go扫描器分析 G o   a F a   a F a   2 0 2 1 - 0 7 - 2 4   # G o l a n g   , 1 6 h t t p s : / / g i t h u b . c o m / p 0 p 0 p 0 / s e c - d e v - i n - a c t i o n - s r c 使 c l i c l i . C o m m a n d m a i n C o m m a n d c m d S c a n f u n c   m a i n ( )   {     a p p   : =   c l i . N e w A p p ( )     a p p . N a m e   =   " P o s t S c a n "     a p p . A u t h o r   =   " a f a "     a p p . V e r s i o n   =   " 2 0 2 1 / 0 7 / 2 3 "     a p p . U s a g e   =   " t c p   s y n / c o n n e c t   p o r t   s c a n n e r "     a p p . C o m m a n d s   =   [ ] c l i . C o m m a n d { c m d . S c a n }     a p p . F l a g s   =   a p p e n d ( a p p . F l a g s ,   c m d . S c a n . F l a g s . . . )     e r r   : =   a p p . R u n ( o s . A r g s )     _   =   e r r } v a r   S c a n   =   c l i . C o m m a n d {
A c t i o n F l a g s F l a g s F l a g s t r i n g F l a g i n t F l a g S c a n A c t i o n U t i l S c a n U t i l v a r   S c a n   =   c l i . C o m m a n d {     N a m e :                 " s c a n " ,     U s a g e :               " s t a r t   t o   s c a n   p o r t " ,     D e s c r i p t i o n :   " s t a r t   t o   s c a n   p o r t " ,     A c t i o n :             u t i l . S c a n ,     F l a g s :   [ ] c l i . F l a g {         s t r i n g F l a g ( " i p l i s t ,   i " ,   " " ,   " i p   l i s t " ) ,         s t r i n g F l a g ( " p o r t ,   p " ,   " " ,   " p o r t   l i s t " ) ,         s t r i n g F l a g ( " m o d e ,   m " ,   " " ,   " s c a n   m o d e " ) ,         i n t F l a g ( " t i m e o u t ,   t " ,   3 ,   " t i m e o u t " ) ,         i n t F l a g ( " c o n c u r r e n c y ,   c " ,   1 0 0 0 ,   " c o n c u r r e n c y " ) ,     } , } f u n c   s t r i n g F l a g ( n a m e ,   v a l u e ,   u s a g e   s t r i n g )   c l i . S t r i n g F l a g   {     r e t u r n   c l i . S t r i n g F l a g {         N a m e :     n a m e ,         V a l u e :   v a l u e ,         U s a g e :   u s a g e ,     } } f u n c   i n t F l a g ( n a m e   s t r i n g ,   v a l u e   i n t ,   u s a g e   s t r i n g )   c l i . I n t F l a g   {     r e t u r n   c l i . I n t F l a g {         N a m e :     n a m e ,         V a l u e :   v a l u e ,         U s a g e :   u s a g e ,     } } f u n c   S c a n ( c t x   * c l i . C o n t e x t )   e r r o r   {     i f   c t x . I s S e t ( " i p l i s t " )   {         v a r s . H o s t   =   c t x . S t r i n g ( " i p l i s t " )     }     i f   c t x . I s S e t ( " p o r t " )   {         v a r s . P o r t   =   c t x . S t r i n g ( " p o r t " )     }     i f   c t x . I s S e t ( " m o d e " )   {         v a r s . M o d e   =   c t x . S t r i n g ( " m o d e " )     }     i f   c t x . I s S e t ( " t i m e o u t " )   {         v a r s . T i m e o u t   =   c t x . I n t ( " t i m e o u t " )     }     i f   c t x . I s S e t ( " c o n c u r r e n c y " )   {         v a r s . T h r e a d N u m   =   c t x . I n t ( " c o n c u r r e n c y " )
v a r s v a r s H o s t s c a n I P I P U t i l . S c a n G e t I p L i s t G e t P o r t s G e n e r a t e T a s k A s s i g n i n g T a s k s P r i n t R e s u l t 便 G e t I p L i s t     }     i p s ,   e r r   : =   G e t I p L i s t ( v a r s . H o s t )     p o r t s ,   e r r   : =   G e t P o r t s ( v a r s . P o r t )     t a s k s ,   n   : =   s c a n n e r . G e n e r a t e T a s k ( i p s ,   p o r t s )     _   =   n     s c a n n e r . A s s i g n i n g T a s k s ( t a s k s )     s c a n n e r . P r i n t R e s u l t ( )     r e t u r n   e r r } v a r   (     T h r e a d N u m   =   5 0 0 0     R e s u l t         * s y n c . M a p     H o s t         s t r i n g     P o r t         =   " 8 0 , 4 4 3 , 8 0 8 0 "     M o d e         =   " s y n "     T i m e o u t   =   2 ) f u n c   i n i t ( )   {     R e s u l t   =   & s y n c . M a p { } } i p s ,   e r r   : =   G e t I p L i s t ( v a r s . H o s t ) p o r t s ,   e r r   : =   G e t P o r t s ( v a r s . P o r t ) t a s k s ,   n   : =   s c a n n e r . G e n e r a t e T a s k ( i p s ,   p o r t s ) _   =   n s c a n n e r . A s s i g n i n g T a s k s ( t a s k s ) s c a n n e r . P r i n t R e s u l t ( ) / /   I P / /   n e t . I P f u n c   G e t I p L i s t ( i p s   s t r i n g )   ( [ ] n e t . I P ,   e r r o r )   {     / /   i p r a n g e . P a r s e L i s t N m a p I P     a d d r e s s L i s t ,   e r r   : =   i p r a n g e . P a r s e L i s t ( i p s )     i f   e r r   ! =   n i l   {         r e t u r n   n i l ,   e r r
i p r a n g e i p r a n g e i p n m a p c b n m a p 使 G e t P o r t s     }     / /   I P     l i s t   : =   a d d r e s s L i s t . E x p a n d ( )     r e t u r n   l i s t ,   e r r } / /   / /   I n t f u n c   G e t P o r t s ( s e l e c t i o n   s t r i n g )   ( [ ] i n t ,   e r r o r )   {     p o r t s   : =   [ ] i n t { }     i f   s e l e c t i o n   = =   " "   {         r e t u r n   p o r t s ,   n i l     }     / /       r a n g e s   : =   s t r i n g s . S p l i t ( s e l e c t i o n ,   " , " )     / /       f o r   _ ,   r   : =   r a n g e   r a n g e s   {         / /           r   =   s t r i n g s . T r i m S p a c e ( r )         / /   -         i f   s t r i n g s . C o n t a i n s ( r ,   " - " )   {             p a r t s   : =   s t r i n g s . S p l i t ( r ,   " - " )             i f   l e n ( p a r t s )   ! =   2   {                 r e t u r n   n i l ,   f m t . E r r o r f ( " I n v a l i d   p o r t   s e l e c t i o n   s e g m e n t : ' % s ' " ,   r )             }             p 1 ,   e r r   : =   s t r c o n v . A t o i ( p a r t s [ 0 ] )             i f   e r r   ! =   n i l   {                 r e t u r n   n i l ,   f m t . E r r o r f ( " I n v a l i d   p o r t   n u m b e r : ' % s ' " ,   p a r t s [ 0 ] )             }             p 2 ,   e r r   : =   s t r c o n v . A t o i ( p a r t s [ 1 ] )             i f   e r r   ! =   n i l   {                 r e t u r n   n i l ,   f m t . E r r o r f ( " I n v a l i d   p o r t   n u m b e r : ' % s ' " ,   p a r t s [ 1 ] )             }             i f   p 1   >   p 2   {                 r e t u r n   n i l ,   f m t . E r r o r f ( " I n v a l i d   p o r t   r a n g e : % d   -   % d " ,   p 1 ,   p 2 )             }             f o r   i   : =   p 1 ;   i   < =   p 2 ;   i + +   {                 p o r t s   =   a p p e n d ( p o r t s ,   i )             }             / /   -         }   e l s e   {             i f   p o r t ,   e r r   : =   s t r c o n v . A t o i ( r ) ;   e r r   ! =   n i l   {                 r e t u r n   n i l ,   f m t . E r r o r f ( " I n v a l i d   p o r t   n u m v e r : ' % s ' " ,   r )             }   e l s e   {                 p o r t s   =   a p p e n d ( p o r t s ,   p o r t )             }         }     }     r e t u r n   p o r t s ,   n i l
G e n e r a t e T a s k s c a n n e r I P m a p A s s i g n i n g T a s k s 线 线 v a r s 5 0 0 0 c o n c u r r e n c y R u n T a s k R u n T a s k } / /   I P m a p f u n c   G e n e r a t e T a s k ( i p L i s t   [ ] n e t . I P ,   p o r t s   [ ] i n t )   ( [ ] m a p [ s t r i n g ] i n t ,   i n t )   {     t a s k s   : =   m a k e ( [ ] m a p [ s t r i n g ] i n t ,   0 )     / /   I P M a p     f o r   _ ,   i p   : =   r a n g e   i p L i s t   {         f o r   _ ,   p o r t   : =   r a n g e   p o r t s   {             i p P o r t   : =   m a p [ s t r i n g ] i n t { i p . S t r i n g ( ) :   p o r t }             t a s k s   =   a p p e n d ( t a s k s ,   i p P o r t )         }     }     r e t u r n   t a s k s ,   l e n ( t a s k s ) } / /   M a p f u n c   A s s i g n i n g T a s k s ( t a s k s   [ ] m a p [ s t r i n g ] i n t )   {     / /   线 线 v a r 5 0 0 0     / /   线 线     s c a n B a t c h   : =   l e n ( t a s k s )   /   v a r s . T h r e a d N u m     f o r   i   : =   0 ;   i   <   s c a n B a t c h ;   i + +   {         / /   R u n T a s k         c u r T a s k   : =   t a s k s [ v a r s . T h r e a d N u m * i   :   v a r s . T h r e a d N u m * ( i + 1 ) ]         R u n T a s k ( c u r T a s k )     }     / /   R u n T a s k     i f   l e n ( t a s k s ) % v a r s . T h r e a d N u m   >   0   {         l a s t T a s k s   : =   t a s k s [ v a r s . T h r e a d N u m * s c a n B a t c h : ]         R u n T a s k ( l a s t T a s k s )     } } / /   R u n T a s k 线 5 0 0 0 f o r 5 0 0 0 / /   C P U / /   R u n T a s k 使 I P f u n c   R u n T a s k 2 ( t a s k s   [ ] m a p [ s t r i n g ] i n t )   {     / /   使 S c a n w g     w g   : =   & s y n c . W a i t G r o u p { }     t a s k C h a n   : =   m a k e ( c h a n   m a p [ s t r i n g ] i n t ,   v a r s . T h r e a d N u m * 2 )     / /   T h r e a d N u m S c a n     f o r   i   : =   0 ;   i   <   v a r s . T h r e a d N u m ;   i + +   {
R u n T a s k s y n c . W a i t G r o u p S c a n S c a n S c a n S a v e R e s u l t     f o r   i   : =   0 ;   i   <   v a r s . T h r e a d N u m ;   i + +   {         g o   S c a n ( t a s k C h a n ,   w g )     }     / /   t a s k C h a n     f o r   _ ,   t a s k   : =   r a n g e   t a s k s   {         w g . A d d ( 1 )         t a s k C h a n   < -   t a s k     }     c l o s e ( t a s k C h a n )     w g . W a i t ( ) } / /   f u n c   S c a n ( t a s k C h a n   c h a n   m a p [ s t r i n g ] i n t ,   w g   * s y n c . W a i t G r o u p )   {     / /       f o r   t a s k   : =   r a n g e   t a s k C h a n   {         f o r   i p ,   p o r t   : =   r a n g e   t a s k   {             i f   s t r i n g s . T o L o w e r ( v a r s . M o d e )   = =   " s y n "   {                 e r r   : =   S a v e R e s u l t ( S y n S c a n ( i p ,   p o r t ) )                 _   =   e r r             }   e l s e   {                 e r r   : =   S a v e R e s u l t ( C o n n e c t ( i p ,   p o r t ) )                 _   =   e r r             }             w g . D o n e ( )         }     } } / /   I P c o n e r r f u n c   S a v e R e s u l t ( i p   s t r i n g ,   p o r t   i n t ,   e r r   e r r o r )   e r r o r   {     i f   e r r   ! =   n i l   {         r e t u r n   e r r     }     / /   R e s u l t s y n c . M a p M a p 线 M a p s y n c . M a p     / /   L o a d S t o r e L o a d     v ,   o k   : =   v a r s . R e s u l t . L o a d ( i p )     / /   f a l s e e l s e I P     i f   o k   {         / /   t r u e v i n t         p o r t s ,   o k 1   : =   v . ( [ ] i n t )         i f   o k 1   {             / /               p o r t s   =   a p p e n d ( p o r t s ,   p o r t )             / /               v a r s . R e s u l t . S t o r e ( i p ,   p o r t s )         }     }   e l s e   {         p o r t s   : =   m a k e ( [ ] i n t ,   0 )
S a v e R e s u l t P r i n t R e s u l t P r i n t R e s u l t S a v e R e s u l t s y n c . M a p P r i n t R e s u l t s y n c . M a p S c a n m o d e C o n n e c t S y n S c a n C o n n e c t t c p S y n S c a n s y n C o n n e c t n e t . D i a l T i m e o u t S y n S c a n         p o r t s   : =   m a k e ( [ ] i n t ,   0 )         p o r t s   =   a p p e n d ( p o r t s ,   p o r t )         v a r s . R e s u l t . S t o r e ( i p ,   p o r t s )     }     r e t u r n   e r r } / /   f u n c   P r i n t R e s u l t ( )   {     / /   s y n c . M a p R a n g e S t o r e     v a r s . R e s u l t . R a n g e ( f u n c ( k e y ,   v a l u e   i n t e r f a c e { } )   b o o l   {         f m t . P r i n t f ( " i p : % v n " ,   k e y )         f m t . P r i n t f ( " p o r t s : % v n " ,   v a l u e )         f m t . P r i n t l n ( s t r i n g s . R e p e a t ( " - " ,   1 0 0 ) )         r e t u r n   t r u e     } ) } / /   I P I P f u n c   C o n n e c t ( i p   s t r i n g ,   p o r t   i n t )   ( s t r i n g ,   i n t ,   e r r o r )   {     / /   使 n e t . D i a l T i m e o u t t c p     c o n n ,   e r r   : =   n e t . D i a l T i m e o u t ( " t c p " ,   f m t . S p r i n t f ( " % v : % v " ,   i p ,   p o r t ) ,   t i m e . D u r a t i o n ( v a r s . T i m e o u t ) * t i m e . S e c o n d )     d e f e r   f u n c ( )   {         / /   c o n n n i l c l o s e         i f   c o n n   ! =   n i l   {             _   =   c o n n . C l o s e ( )         }     } ( )     r e t u r n   i p ,   p o r t ,   e r r } / /   i p f u n c   S y n S c a n ( d s t I p   s t r i n g ,   d s t P o r t   i n t )   ( s t r i n g ,   i n t ,   e r r o r )   {     / /   l o c a l I P P o r t i p     s r c I p ,   s r c P o r t ,   e r r   : =   l o c a l I P P o r t ( n e t . P a r s e I P ( d s t I p ) )     / /   l o o k u p I P i p a     d s t A d d r s ,   e r r   : =   n e t . L o o k u p I P ( d s t I p )     i f   e r r   ! =   n i l   {         r e t u r n   d s t I p ,   0 ,   e r r     }     / /   i p i p     / /   i p 4 i p v 4 i p v 6 4
    / /   i p 4 i p v 4 i p v 6 4     d s t i p   : =   d s t A d d r s [ 0 ] . T o 4 ( )     / /   l a y e r s . T C P P o r t u i n t 1 6     v a r   d s t p o r t   l a y e r s . T C P P o r t     d s t p o r t   =   l a y e r s . T C P P o r t ( d s t P o r t )     s r c p o r t   : =   l a y e r s . T C P P o r t ( s r c P o r t )     / /   i p     i p   : =   & l a y e r s . I P v 4 {         S r c I P :         s r c I p ,         D s t I P :         d s t i p ,         P r o t o c o l :   l a y e r s . I P P r o t o c o l T C P ,     }     / /   t c p     t c p   : =   & l a y e r s . T C P {         S r c P o r t :   s r c p o r t ,         D s t P o r t :   d s t p o r t ,         S Y N :           t r u e ,     }     / /   i p t c p     e r r   =   t c p . S e t N e t w o r k L a y e r F o r C h e c k s u m ( i p )     / /       / /       b u f   : =   g o p a c k e t . N e w S e r i a l i z e B u f f e r ( )     / /       o p t s   : =   g o p a c k e t . S e r i a l i z e O p t i o n s {         C o m p u t e C h e c k s u m s :   t r u e ,         F i x L e n g t h s :               t r u e ,     }     / /       i f   e r r   : =   g o p a c k e t . S e r i a l i z e L a y e r s ( b u f ,   o p t s ,   t c p ) ;   e r r   ! =   n i l   {         r e t u r n   d s t I p ,   0 ,   e r r     }     / /   i p v 4     c o n n ,   e r r   : =   n e t . L i s t e n P a c k e t ( " i p 4 : t c p " ,   " 0 . 0 . 0 . 0 " )     i f   e r r   ! =   n i l   {         r e t u r n   d s t I p ,   0 ,   e r r     }     d e f e r   c o n n . C l o s e ( )     / /   d s t i p i p i p     i f   _ ,   e r r   : =   c o n n . W r i t e T o ( b u f . B y t e s ( ) ,   & n e t . I P A d d r { I P :   d s t i p } ) ;   e r r   ! =   n i l   {         r e t u r n   d s t I p ,   0 ,   e r r     }     / /       i f   e r r   : =   c o n n . S e t D e a d l i n e ( t i m e . N o w ( ) . A d d ( t i m e . D u r a t i o n ( v a r s . T i m e o u t )   *   t i m e . S e c o n d ) ) ;   e r r   ! =   n i l   {         r e t u r n   d s t I p ,   0 ,   e r r     }     / /   f o r s y n - a c k     f o r   {
l o c a l I P P o r t I P G o 使 L i n u x W i n 6 C B G o     f o r   {         b   : =   m a k e ( [ ] b y t e ,   4 0 9 6 )         / /           n ,   a d d r ,   e r r   : =   c o n n . R e a d F r o m ( b )         i f   e r r   ! =   n i l   {             r e t u r n   d s t I p ,   0 ,   e r r         }   e l s e   i f   a d d r . S t r i n g ( )   = =   d s t i p . S t r i n g ( )   {             / /   p a c k e t             p a c k e t   : =   g o p a c k e t . N e w P a c k e t ( b [ : n ] ,   l a y e r s . L a y e r T y p e T C P ,   g o p a c k e t . D e f a u l t )             / /   t c p             i f   t c p L a y e r   : =   p a c k e t . L a y e r ( l a y e r s . L a y e r T y p e T C P ) ;   t c p L a y e r   ! =   n i l   {                 t c p ,   _   : =   t c p L a y e r . ( * l a y e r s . T C P )                 i f   t c p . D s t P o r t   = =   s r c p o r t   {                     / /   s y n a c k                     i f   t c p . S Y N   & &   t c p . A C K   {                         r e t u r n   d s t I p ,   d s t P o r t ,   e r r                     }   e l s e   {                         r e t u r n   d s t I p ,   0 ,   e r r                     }                 }             }         }     } } / /   I P I P I P f u n c   l o c a l I P P o r t ( d s t i p   n e t . I P )   ( n e t . I P ,   i n t ,   e r r o r )   {     / /   I P u d p a d d r I P n e t . I P U D P A d d r     s e r v e r A d d r ,   e r r   : =   n e t . R e s o l v e U D P A d d r ( " u d p " ,   d s t i p . S t r i n g ( ) + " 5 4 3 2 1 " )     i f   e r r   ! =   n i l   {         r e t u r n   n i l ,   0 ,   e r r     }     / /   l a d d r i p n i l s e r v e r A d d r i p U D P A d d r     i f   c o n ,   e r r   : =   n e t . D i a l U D P ( " u d p " ,   n i l ,   s e r v e r A d d r ) ;   e r r   = =   n i l   {         / /   L o c a l A d d r c o n I P I P 广         i f   u d p a d d r ,   o k   : =   c o n . L o c a l A d d r ( ) . ( * n e t . U D P A d d r ) ;   o k   {             r e t u r n   u d p a d d r . I P ,   u d p a d d r . P o r t ,   n i l         }     }     r e t u r n   n i l ,   - 1 ,   e r r }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则