⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wizserver.c

📁 Linux 上的socket嗅探器
💻 C
📖 第 1 页 / 共 3 页
字号:
/*
 *
 * Copyright (C) 2003 Xiangbin Lee <honeycombs@sina.com> <honeycombs@263.net>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software Foundation.
 */

#include <string.h>
#include "ache.h"
#include "serverfun.h"
#include "common.h"  
#include "hexviewdlg.h"
#include "poport.h"

/* The Widgets list for dialog

1.dialog preview:
 ______________________________________________________
/v|                                                _ X \
--------------------------------------------------------
|                         |                            |
|         area C       span_ha       area E            |
|                         |                            |
--------------  span_va --------------------------------
|                         |                            |
|         area B1         |         area A1            |
|                         |                            |
---------- span_vc ------ | -------- span_vd -----------
|                      span_hb                         |
|         area B2         |         area A2            |
|                         |                            |
-------------------------------------------------------

2.main gtk ctrl relations :
  +va          span_va    return
   |+ha        span_ha
   | |-C       area C,    message list, [text area]
   | |-E       area E,    link list, [clist]
   |
   |+hb        span_hb
     |+vd      frame->span_vd
     | |-A1    area A1,   receive log, [list view]
     | |-A2    area A2,   receive content(hex and chars), [draw area]
     |+vc      frame->span_vd
       |-B1    area B1,   send content, [text]
       |-B2    area B2,   send option, [dialog or frame]
 */


static REQLIST *curClient=NULL;
/*  for area C */
GTK_TextArea textarea_c={0,0,0,0,};

void  wizserv_areac_addtext(gchar *msg)
{
    GtkTextIter iter;
    if(textarea_c.regsignal!=GTK_WIDGET_REG)
       return ;
    if(msg[strlen(msg)-1]!='\n')
        strcat((char *)msg,"\n");
    gtk_text_buffer_get_iter_at_offset (textarea_c.buffer, &iter, 0);
    gtk_text_buffer_insert (textarea_c.buffer, &iter,msg,-1);
}

void wizserv_areac_settext(gchar *msg)
{
    if(textarea_c.regsignal!=GTK_WIDGET_REG)
       return ;
    gtk_text_buffer_set_text (textarea_c.buffer, msg,strlen(msg));
}

/* for area A2*/

GtkHexView wizspy_areaa2;

GtkWidget *wizserv_areaa2_create(GtkWidget *window)
{
    GtkWidget *frame;
    GdkColor color[6];
    color[0].red=0x80FF;color[0].green=0x80FF;color[0].blue=0xFFFF;

    color[1].red=0xFFFF;color[1].green=0x0000;color[1].blue=0x0000;
    color[2].red=0x0000;color[2].green=0x80FF;color[2].blue=0xFFFF;
    color[3].red=0xFFFF;color[3].green=0x0000;color[3].blue=0x0000;

    color[4].red=0x0000;color[4].green=0x40FF;color[4].blue=0x80FF;
    color[5].red=0xFFFF;color[5].green=0x0000;color[5].blue=0x0000;

    frame = GtkHexView_Create(&wizspy_areaa2,window);
      /* set option to show */
    GtkHexView_SetFontColor(&wizspy_areaa2,color[0],color[1],color[2],color[3],color[4],color[5]);
    GtkHexView_SetLineCharNum(&wizspy_areaa2, 16,0);
    GtkHexView_SetSelOption(&wizspy_areaa2, 0,0,0);

    return frame;
}

/* for area B1*/

GTK_TextArea textarea_b1={0,0,0,0,};
guint wizserv_areab1_gettext(gchar *msg)
{
    gchar *lpbuf;
    guint buflen=0;
    GtkTextIter itstart, itend;
    if(textarea_b1.regsignal!=GTK_WIDGET_REG)
       return 0;

    gtk_text_buffer_get_start_iter(textarea_b1.buffer,&itstart);
    gtk_text_buffer_get_end_iter(textarea_b1.buffer,&itend);
    lpbuf=gtk_text_buffer_get_text (textarea_b1.buffer,&itstart,&itend,1);
    buflen=strlen((char*)lpbuf);
    if(buflen>0)
    {
        memcpy(msg,lpbuf,buflen);
        msg[buflen]=0;
    }
    return buflen;
}

/* for area B2*/

gint ifwizserv_areab2_ishex=0;
void wizserv_areab2_clicktext(GtkWidget *window, gpointer fundata)
{
    ifwizserv_areab2_ishex=0;
}

void wizserv_areab2_clickhex(GtkWidget *window, gpointer fundata)
{
    ifwizserv_areab2_ishex=1;
}

gint ifwizserv_autosend=0;
gint ifwizserv_autodisconnect=0;

void wizserv_areab2_clickdisconnect(GtkWidget *window, gpointer fundata)
{
    if(curClient==NULL)
        return;
    Server_RemoveClient(curClient);
    curClient=0;
}

void wizserv_areab2_clicksend(GtkWidget *window, gpointer fundata)
{
    if(curClient==NULL)
        return;
    // TODO: Add your control notification handler code here

    static gchar tmpstr[4096];
    guint DataLength=0;

    if(!ifwizserv_areab2_ishex)
    {
        memset(tmpstr,0,4096);
        DataLength=wizserv_areab1_gettext(tmpstr);
        if(DataLength>0)
        {
            Server_SendToClient(curClient,(guchar *)tmpstr,DataLength);
            if(ifwizserv_autodisconnect)
                wizserv_areab2_clickdisconnect(window,fundata);
        }
    }
    else
    {
        guchar sdata[2048];
        gchar strdata[20];
        memset(tmpstr,0,4096);
        DataLength=wizserv_areab1_gettext(tmpstr);
        if(DataLength>0)
        {

            guint dataleng =0;
            int  re ;
            int  data;

            gchar *lp=tmpstr ;

            do{
                re=sscanf(lp,"%s",strdata);
                lp+=5;
                if(re!=EOF)
                {
                    sscanf(strdata,"%x",&data);
                    data%=256;
                    dataleng++;
                    if(dataleng>0&&dataleng<2048)
                        sdata[dataleng-1]=(guchar)data;
                    else break;
                }
                else break;

            }while(re!=EOF);
            if(dataleng>0)
            {
                Server_SendToClient(curClient,(guchar *)sdata,dataleng);
                if(ifwizserv_autodisconnect)
                    wizserv_areab2_clickdisconnect(window,fundata);
            }
        }
    }
}



GtkWidget *wizserv_areab2_create(GtkWidget *window)
{
    GtkWidget *frame, *vbox, *vbox2, *button;
    GSList *group;

    frame = gtk_frame_new ("Send option:");

    vbox = gtk_vbox_new (FALSE, 0);
    gtk_container_add (GTK_CONTAINER (frame), vbox);
    gtk_widget_show (vbox);

    // radio buttons
    vbox2 = gtk_vbox_new (FALSE, 10);
    gtk_container_set_border_width (GTK_CONTAINER (vbox2), 10);
    gtk_box_pack_start (GTK_BOX (vbox), vbox2, TRUE, TRUE, 0);
    gtk_widget_show (vbox2);
    button = gtk_radio_button_new_with_label (NULL, "Use content as normal text");
    g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (wizserv_areab2_clicktext), NULL);
    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
    gtk_box_pack_start (GTK_BOX (vbox2), button, TRUE, TRUE, 0);
    gtk_widget_show (button);
    group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (button));
    button = gtk_radio_button_new_with_label (group, "Use content as hex data");
    g_signal_connect (G_OBJECT (button), "clicked",G_CALLBACK (wizserv_areab2_clickhex),NULL);
    gtk_box_pack_start (GTK_BOX (vbox2), button, TRUE, TRUE, 0);
    gtk_widget_show (button);

    // buttons
    button = gtk_hseparator_new ();
    gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, TRUE, 0);
    gtk_widget_show (button);

    vbox2 = gtk_hbox_new (FALSE, 10);
    gtk_container_set_border_width (GTK_CONTAINER (vbox2), 10);
    gtk_box_pack_start (GTK_BOX (vbox), vbox2, FALSE, TRUE, 0);
    gtk_widget_show (vbox2);

    button = gtk_button_new_with_label ("Disconnect");
    g_signal_connect (G_OBJECT (button), "clicked",G_CALLBACK (wizserv_areab2_clickdisconnect),NULL);
    gtk_box_pack_start (GTK_BOX (vbox2), button, TRUE, TRUE, 0);
    button = gtk_button_new_with_label ("Send");
    g_signal_connect (G_OBJECT (button), "clicked",G_CALLBACK (wizserv_areab2_clicksend), NULL);
    gtk_box_pack_start (GTK_BOX (vbox2), button, TRUE, TRUE, 0);


    if(window!=NULL)
        gtk_container_add (GTK_CONTAINER (window), frame);
   gtk_widget_show_all (frame);
   return frame;
}


/* for area A1*/


GtkScrollCtrl wizserv_areaa1list={0,0,0};
guint areaa1_packetrownum=0;
gchar *wizserv_areaa1_defaulttitles[]=
{
    "ID", "Date Time",  "Length",
};


void wizserv_areaa1_selection( GtkWidget      *clist,
                     gint            row,
                     gint            column,
                     GdkEventButton *event,
                     gpointer        data )
{

    static unsigned long lastid=0;
    ClientDataInfo *retinsert=NULL;

    if(row>=0)
    {
        retinsert= (ClientDataInfo *)gtk_clist_get_row_data (GTK_CLIST(clist), row);
        if(retinsert!=NULL&&lastid!=retinsert->nID)
        {
            lastid=retinsert->nID;
            /* set data to this areaa1*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -