示例#1
0
void DataSink::on_tcpSend_clicked(void)
{
	if (tcpConnection != NULL && ui->tcpSend->isEnabled()) {
		QByteArray data = ui->tcpText->text().toLocal8Bit();
		tcpConnection->write(data.data(), data.length());
		tcp_print("SEND: " + ui->tcpText->text());
		ui->tcpText->clear();
	}
}
示例#2
0
static void etherframe_print(u_char *usr, const struct pcap_pkthdr *pkt,
			     const u_char *d, uint16_t ethtype)
{
	struct iphdr *ip;
	struct tcphdr *th;
	struct udphdr *uh;
	uint16_t ethtype_le;

	ethtype_le = ntohs(ethtype);

	switch (ethtype_le) {
	case ETH_P_IP:
		ip = ip_hdr(d);
		sb_append_str(&sb, "IP: ");
		iphdr_print(ip, &sb);

		switch (ip->protocol) {
		case IPPROTO_TCP:
			th = tcp_hdr(d + ip_hdrlen(ip));
			sb_append_str(&sb, "; TCP: ");
			tcp_print(th, &sb);
			break;

		case IPPROTO_UDP:
			uh = udp_hdr(d + ip_hdrlen(ip));
			sb_append_str(&sb, "; UDP: ");
			udp_print(uh, &sb);
			break;

		default:
			sb_append_char(&sb, ' ');
			sb_append_str(&sb, ipproto_str(ip->protocol));
		}

		break;
	default:
		/* FIXME: This code is open to buffer overrun errors */
		sb_append_str(&sb, "ether type: ");
		sb.len += sprintf(sb_curr(&sb), "0x%04x ", ethtype_le);
		sb_append_str(&sb, ethertype_to_str(ethtype_le));
	}
}
示例#3
0
/*
 * Функция, вызываемая pcap_loop при получении пакета. Производит 
 * форматированный вывод его содержимого. Прототип обязательно такого вида.
 */ 
void handler_packet(u_char *args, struct pcap_pkthdr *info, u_char *packet)
{
    short   proto;          // Инкапсулированный протокол текущего заголовка
    u_char  *header;        // Указатель на текущий заголовок
    u_char  *header_prev;   // Указатель на предыдущий заголовок
    u_short chsum;          // Контрольная сумма

    // Выводим симолы для разделения вывода пакетов
    for (int i = 0; i< 93; i++)
        printf("=");
    printf("\n\n");

    // Поочередно разворачиваем пакет, смещаясь до следующего заголовка
    header = packet;
    proto = ethernet_print((struct hdr_ethernet *)header);
    header += ethernet_getsize((struct hdr_ethernet *)header);
    while(proto != 0){
        switch (proto){
            case TYPE_IP:
                proto = ip_print((struct hdr_ip *)header);
                header_prev = header;
                header += ip_getsize((struct hdr_ip *)header) * 4;
            break;
            case TYPE_TCP:
                proto = tcp_print((struct hdr_tcp *)header);
                chsum = tcp_checksum(header, header_prev, info->caplen - 
                                     (int)(header - packet));
                printf("calc_chsum: %#x\n", chsum);
                header += tcp_getsize((struct hdr_tcp *)header);
            break;
            default:
                proto = 0;
        }
    }

    // Выводим оставшиеся данные
    print_data(header, info->caplen - (int)(header - packet));
    printf("\n");
}