Соглашение | Публикация статей

Красивые рольшторы - roll-service.by

Программа для обмена сообщениями между 2-мя рабочими станциями в сети NetWare
Категория: Статьи

Программу нужно запускать с ключом т.е. указать свое имя каким оно будет в сети, когда вы будете обмениваться сообщениями.

Например: Message.exe/ sergei

Текст программы:

typedef struct
{
unsigned char netadd[4];
unsigned char nodeadd[6];
unsigned short socket;
} IPXADDRESS;

typedef struct
{
unsigned short checksum;
unsigned short length;
unsigned char tc;
unsigned char type;
IPXADDRESS dest;
IPXADDRESS source;
} IPXHEADER;

typedef struct
{
void far *linkaddress;
void (far *esraddress)();
unsigned char inuse;
unsigned char cc;
unsigned short socket;
unsigned char workspace[16];
unsigned char immedaddr[6];
unsigned short fragcount;
void far *fragaddr1;
unsigned short fragsize1;
void far *fragaddr2;
unsigned short fragsize2;
} IPXECB;

#ifdef __cplusplus
extern "C" {
#endif

extern unsigned short reverseword ( unsigned short );
extern unsigned long ipxinit ( void );
extern unsigned long ipxentry;
extern void ipxgetaddress ( void * );

extern unsigned short ipxgetmaxpacketsize ( void );
extern unsigned short ipxgetretrycount ( void );
extern unsigned short ipxverifychecksum( IPXECB * );
extern unsigned char ipxopensocket ( unsigned char, unsigned short * );
extern void ipxclosesocket ( unsigned short );
extern unsigned char ipxlistenforpacket ( IPXECB * );
extern void ipxsendpacket ( IPXECB * );
extern void sendwithchecksum( IPXECB * );
extern void ipxrelenquishcontrol ( void );
#ifdef __cplusplus
}
#endif

ассемблер:

.model large
.data
public _ipxentry
_ipxentry dd 0

.code

public _reverseword
_reverseword:
push bp
mov bp,sp
mov ax,[bp+6]
xchg ah,al
pop bp
retf

public _ipxinit
_ipxinit:
push di
push es
mov ax,7A00h
int 2Fh
cmp al,0FFh
jnz _ipxinit0
mov word ptr [_ipxentry+0],di
mov word ptr [_ipxentry+2],es
_ipxinit0:
mov dx,word ptr [_ipxentry+2]
mov ax,word ptr [_ipxentry+0]
pop es
pop di
retf

public _ipxgetaddress
_ipxgetaddress:
push bp
mov bp,sp
mov bx,0009h
mov si,[bp+6]
mov es,[bp+8]
call [_ipxentry]
pop bp
retf

public _ipxgetmaxpacketsize
_ipxgetmaxpacketsize:
mov bx,001Ah ;0d
call [_ipxentry]
retf

public _ipxgetretrycount
_ipxgetretrycount:
mov bx,001Ah
call [_ipxentry]
mov ax,cx
retf

public _ipxopensocket
_ipxopensocket:
push bp
mov bp,sp
push ds
mov al,[bp+6]
mov bx,[bp+8]
mov ds,[bp+10]
mov dx,[bx]
pop ds
mov bx,0000h
call [_ipxentry]
push ds
mov bx,[bp+8]
mov ds,[bp+10]
mov [bx],dx
mov ah,00h
pop ds
pop bp
retf

public _ipxclosesocket
_ipxclosesocket:
push bp
mov bp,sp
mov bx,0001h
mov dx,[bp+6]
call [_ipxentry]
pop bp
retf

public _ipxlistenforpacket
_ipxlistenforpacket:
push bp
mov bp,sp
push ds
push di
push si
push es
mov bx,0004h
mov si,[bp+6]
mov es,[bp+8]
call [_ipxentry]
mov ah,00h
pop es
pop si
pop di
pop ds
pop bp
retf

public _ipxsendpacket
_ipxsendpacket:
push bp
mov bp,sp
push si
push es
mov bx,0003h
mov si,[bp+6]
mov es,[bp+8]
call [_ipxentry]
pop es
pop si
pop bp
retf

public _sendwithchecksum
_sendwithchecksum:
push bp
mov bp,sp
push si
push es
mov bx,0020h
mov si,[bp+6]
mov es,[bp+8]
call [_ipxentry]
pop es
pop si
pop bp
retf

public _ipxrelenquishcontrol
_ipxrelenquishcontrol:
mov bx,000Ah
call [_ipxentry]
retf

public _ipxverifychecksum
_ipxverifychecksum:
push bp
mov bp,sp
push si
push es
mov bx,0022h
mov si,[bp+6]
mov es,[bp+8]
call [_ipxentry]
pop es
pop si
pop bp
retf

end

С++

#include <stdio.h>
#include <bios.h>
#include <fcntl.h>
#include <dos.h>
#include <time.h>
#include <io.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <mem.h>
#include "ipx.h"

int getkey(void);
void sent_buf(int msh,char *sbuffer);

unsigned int socket=0x5000;
#define NPACKETS 5 // количество окон приема/прослушивания
#define PACKETSIZE 200 // размер буфера сообщения

IPXECB recb[NPACKETS],secb[NPACKETS];
IPXHEADER rheader[NPACKETS],sheader[NPACKETS];
unsigned char rbuffer[NPACKETS][PACKETSIZE];
unsigned char sbuffer[NPACKETS][PACKETSIZE];
unsigned char M_ADDR[6];
char NAME_USER[30];
//------------------------------------------------------------------------------
void main ( int argc, char *argv[] )
{
char buf[100],mes[150];
unsigned short ra;
int Flag_exit,key,i;
IPXADDRESS myaddress;

clrscr();
if(argc<2)
{
printf("Ошибка задания параметров !\n\n");
printf("message.exe NAME_USER \n");
exit(1);
}
strcpy(NAME_USER,argv[1]);

if(!ipxinit()) { printf("IPX не найден !\n"); exit(1); }

if (ipxopensocket(0x00,&socket) == 0xff) { printf("Канал уже открыт !\n"); exit(1); }

printf("F1 - ввести сообщение. Esc - выход.\n\n\n");
ipxgetaddress(&myaddress);
for(i=0;i<6;i++) M_ADDR[i]=myaddress.nodeadd[i];

// инициализируем окна прослушивания
for(ra=0;ra<NPACKETS;ra++)
{
recb[ra].socket=socket;
recb[ra].esraddress=NULL;
recb[ra].fragcount=2;
recb[ra].fragaddr1=&rheader[ra];
recb[ra].fragsize1=sizeof(IPXHEADER);
recb[ra].fragaddr2=&rbuffer[ra];
recb[ra].fragsize2=PACKETSIZE;
ipxlistenforpacket(&recb[ra]);
}

Flag_exit=0;
while(!Flag_exit)
{
if( kbhit() ) // нажата клавиша
{
key=getkey();
switch(key)
{
case 27: // Esc
Flag_exit=1;
break;
case 315: // F1
textcolor(7);
printf("-> ");gets(buf); printf("\n");
sprintf(mes,"%s: %s",NAME_USER,buf);
for(ra=0;ra<NPACKETS;ra++)
{
if(!secb[ra].inuse )
{ sent_buf(ra,mes); break; }
}
break;
}
}

for(ra=0;ra<NPACKETS;ra++)
{
if(!recb[ra].inuse) // приемные окна
{
if(memcmp(rheader[ra].source.nodeadd,M_ADDR,6))
{
textcolor(3);
cprintf("%s\n\r",rbuffer[ra]);
}
memset(rbuffer[ra],0,PACKETSIZE);
recb[ra].socket=socket;
recb[ra].esraddress=NULL;
recb[ra].fragcount=2;
recb[ra].fragaddr1=&rheader[ra];
recb[ra].fragsize1=sizeof(IPXHEADER);
recb[ra].fragaddr2=&rbuffer[ra];
recb[ra].fragsize2=PACKETSIZE;
ipxlistenforpacket(&recb[ra]);
}//if(!recb[ra].inuse)
}//for(<NPACKETS)

}

ipxclosesocket(socket);
}

//----------------------------------
void sent_buf(int msh,char *buf)
{
int i;

memset(sbuffer[msh],0,PACKETSIZE);
sprintf(sbuffer[msh],"%s",buf);

for(i=0;i<6;i++) sheader[msh].source.nodeadd[i]=M_ADDR[i];
for(i=0;i<4;i++) sheader[msh].source.netadd[i]=0x9;

for(i=0;i<4;i++) sheader[msh].dest.netadd[i]=0x09;
for(i=0;i<6;i++) sheader[msh].dest.nodeadd[i]=0xff;//M_ADDR[i];
for(i=0;i<6;i++) secb[msh].immedaddr[i]=0xff;//M_ADDR[i];
sheader[msh].dest.socket=socket;
sheader[msh].type=4;
secb[msh].socket=socket;
secb[msh].esraddress=NULL;
secb[msh].fragcount=2;
secb[msh].fragaddr1=&sheader[msh];
secb[msh].fragsize1=sizeof(IPXHEADER);
secb[msh].fragaddr2=&sbuffer[msh];
secb[msh].fragsize2=PACKETSIZE;
ipxsendpacket(&secb[msh]);
}

//-----------------------------------------------------------
int getkey(void)
{
int key, lo, hi;

key = bioskey(0);
lo = key & 0X00FF;
hi = (key & 0XFF00) >> 8;
return(lo ? lo : hi + 256);
}

Программа проверена и работает нориально.


Статьи по теме:

Содержимое таблицы FAT
Обмен данными через буфер обмена
TCO
Самый востребованный софт!
ЦИКЛ ФУНКЦИОНИРОВАНИЯ ВИРУСОВ
Максимальная разрешающая способность
Открытие документа из Главного меню
Входные и выходные данные
Типизация
Списки воспроизведения
Межсетевой обмен и связь с глобальным Internet
Краткий обзор возможностей программы Ехсеl 7.0
Компоненты, модули, мамботы в CMS Joomla
Прокси-Сервер - Это Действенный Способ Защиты Информации, А Также Преграда Для Атак Хакеров
Метод простой итерации
Критерий использования ЭС для решения задач
Рабочий стол Microsoft Windows XP
МЕТОДЫ ЗАЩИТЫ ОТ КОМПЬЮТЕРНЫХ ВИРУСОВ
Программа Sendmail
Черный Баннер - Миф или реальность
Черный Баннер - 25й кадр интернета
Netpromoter: Новые Возможности Профессиональной Интернет-Статистики
Создание и конфигурирование сжатых дисков
WordPad: Выделение текста начертанием
ЛАЗЕРНЫЕ (СВЕТОДИОДНЫЕ) ПЛОТТЕРЫ
WordPad: Выделение текста цветом
Информатизация общества: социальные условия, предпосылки и последствия
Делайте резервные ропии профессионально - Norton Ghost 14
Устройство и классификация принтеров
Компьютерный вирус
Будущие модули CompactPCI- которые будут производится в ближайшее время
Ваш подросток безопасно использует интернет?
Масштабирование изображения
КОМПЬЮТЕРНАЯ ИНФОРМАЦИЯ КАК ОБЪЕКТ ПРЕСТУПНОГО ПОСЯГАТЕЛЬСТВА
Общие сведения языка программирования
Некоторые Мысли По Защите От Спама
Возможности стабилизаторов напряжения для защиты персонального компьютера
Региональная Система Имен
Настройка Главного меню Microsoft Windows XP
Место кибернетики в системе наук
Экспертные системы
Внесение примесей
Очистка большой области рисунка
Создание Java-приложения “HelloJava”
Работы ученых
Нарушение правил эксплуатации ЭВМ, системы ЭВМ или их сети
Средства Защиты Компьютера И Максимальная Его Безопасность
Сети NETGEAR
Ms Word Vs Notepad
Внедрение Crm Системы Quick Sales 2 В Компании «Эпос»
Кибернетический подход
Скачивать Программы Бесплатно Просто, Но Невыгодно
Уход За Домашним Компьютером
Признаки проявления вируса
Прокладка абонентских линий