]> git.pld-linux.org Git - packages/dsniff.git/blob - dsniff-gg.patch
1247372c11203b6ea1340fb1f2eff6c0db5083eb
[packages/dsniff.git] / dsniff-gg.patch
1 diff -urN dsniff-2.3/msgsnarf.8 dsniff-2.3-gg/msgsnarf.8
2 --- dsniff-2.3/msgsnarf.8       Sun Nov 19 07:10:50 2000
3 +++ dsniff-2.3-gg/msgsnarf.8    Tue Mar 26 11:29:29 2002
4 @@ -14,7 +14,7 @@
5  .ad
6  .fi
7  \fBmsgsnarf\fR records selected messages from AOL Instant
8 -Messenger, ICQ 2000, IRC, MSN Messenger, or Yahoo Messenger chat
9 +Messenger, ICQ 2000, IRC, MSN Messenger, Gadu-Gadu, or Yahoo Messenger chat
10  sessions.
11  .SH OPTIONS
12  .IP "\fB-i \fIinterface\fR"
13 diff -urN dsniff-2.3/msgsnarf.c dsniff-2.3-gg/msgsnarf.c
14 --- dsniff-2.3/msgsnarf.c       Fri Dec 15 21:12:19 2000
15 +++ dsniff-2.3-gg/msgsnarf.c    Tue Mar 26 14:09:13 2002
16 @@ -1,10 +1,13 @@
17  /*
18    msgsnarf.c
19  
20 -  Sniff chat messages (AIM, ICQ, IRC, MSN, Yahoo) on a network.
21 +  Sniff chat messages (AIM, ICQ, IRC, MSN, Yahoo, Gadu-Gadu) on a network.
22  
23    Copyright (c) 1999 Dug Song <dugsong@monkey.org>
24 -  
25 +
26 +  2002.03.20 - support for Gadu-Gadu messages added by Ryba <ryba_84@hotmail.com>
27 +  (based on protocol description from EKG, http://dev.null.pl/ekg/)
28 +
29    $Id$
30  */
31  
32 @@ -544,6 +547,112 @@
33         return (len - buf_len(&buf));
34  }
35  
36 +
37 +/*
38 +  Support for GG messages added by Ryba <ryba_84@hotmail.com>
39 +  v1.0
40 +
41 +  Protocol description taken from EKG (http://dev.null.pl/ekg/)
42 +  by <wojtekka@irc.pl>, <speedy@atman.pl> and others.
43 +  Thanks to all of them!
44 +
45 +  Gadu-Gadu (http://www.gadu-gadu.pl) is a Polish communicator.
46 +  I believe it is most popular instant messenger in Poland.
47 +*/
48 +
49 +#define GG_LOGIN 0x000c
50 +#define GG_SEND_MSG 0x000b
51 +#define GG_RECV_MSG 0x000a
52 +        
53 +struct gg_header {
54 +  int type;          
55 +  int length;        
56 +};
57 +
58 +struct gg_send_msg {
59 +  int recipient;
60 +  int seq;
61 +  int class;
62 +//  char message[];
63 +};
64 +
65 +struct gg_recv_msg {
66 +  int sender;
67 +  int seq;
68 +  int time;
69 +  int class;
70 +//  char message[];
71 +};
72 +
73 +struct gg_login {
74 +  int uin;       
75 +  int hash;      
76 +  int status;    
77 +  int version;   
78 +  int local_ip;  
79 +  u_short local_port;
80 +};
81 +
82 +int process_gg(struct client_info *info, u_char *data, int len) {
83 +
84 +  struct buf *msg, buf;
85 +  struct gg_header *header;
86 +  struct gg_send_msg *send_msg;
87 +  struct gg_recv_msg *recv_msg;
88 +  struct gg_login *login;
89 +  struct in_addr addr;
90 +  char *p;
91 +  char sbuff [10];
92 +  int i;
93 +  
94 +  buf_init(&buf, data, len);
95 +  
96 +  while (buf_len(&buf) > sizeof(*header)) {
97 +    header = (struct gg_header *)buf_ptr(&buf);
98 +    i = sizeof(*header) + header->length;
99 +    
100 +    if ((msg = buf_tok(&buf, NULL, i)) == NULL)
101 +      break;
102 +    
103 +    buf_skip(msg, sizeof(*header));
104 +
105 +    if (header->type == GG_LOGIN && header->length == 22) {
106 +    
107 +      login = (struct gg_login *)buf_ptr(msg);
108 +      addr.s_addr = login->local_ip;
109 +
110 +      if (info->nick) free(info->nick);
111 +      snprintf(sbuff, 10, "%u", login->uin);
112 +      info->nick = strdup(sbuff);
113 +    } else
114 +    
115 +    if (header->type == GG_SEND_MSG) {
116 +      send_msg = (struct gg_send_msg *)buf_ptr(msg);
117 +      buf_skip(msg, sizeof(*send_msg));
118 +      
119 +      p = buf_strdup(msg);          
120 +      if (regex_match(p)) {
121 +        printf("%s GG %s > %u: %s\n", timestamp(), info->nick, send_msg->recipient, p);
122 +      }
123 +      if (p) free(p);
124 +    } else
125 +
126 +    if (header->type == GG_RECV_MSG) {
127 +      recv_msg = (struct gg_recv_msg *)buf_ptr(msg);
128 +      buf_skip(msg, sizeof(*recv_msg));
129 +      
130 +      p = buf_strdup(msg);          
131 +      if (regex_match(p)) {
132 +        printf("%s GG %s < %u: %s\n", timestamp(), info->nick, recv_msg->sender, p);
133 +      }
134 +      if (p) free(p);
135 +    }
136 +  }
137 +   
138 +  return(len - buf_len(&buf));
139 +}
140 +
141 +
142  void
143  sniff_msgs(struct tcp_stream *ts, void **conn_save)
144  {
145 @@ -562,6 +671,9 @@
146         }
147         else if (ts->addr.dest == 1863) {
148                 process_msgs = process_msn;
149 +       }
150 +       else if (ts->addr.dest == 8074 || ts->addr.source == 8074) {
151 +         process_msgs = process_gg;
152         }
153         else return;
154         
This page took 0.063895 seconds and 2 git commands to generate.