Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.09.26;
Скачать: [xml.tar.bz2];

Вниз

пинг хоста   Найти похожие ветки 

 
linuxoid   (2010-06-30 15:22) [0]

здравствуйте!
Хочу сделать сделать прогу для пинга хостов.

имеется форма на ней кнопки "добавить", "стоп " и MEMO. при его нажатии чтоб открывалась другая форма на которой чтоб были 2 текстовых поля для ввода ip хоста и для ввода таймаута  и кнопка "добавить хост". по нажатии  "добавить хост" на MEMO в главной форме шел пинг этого хоста.
ну и по нажатии "стоп" программа прекращала пинг.

Заранее благодарю


 
linuxoid   (2010-06-30 15:23) [1]

Как это все реализовать?


 
И. Павел ©   (2010-06-30 15:55) [2]

Пинг средствами Delphi:
http://www.google.ru/search?hl=ru&source=hp&q=%D0%BF%D0%B8%D0%BD%D0%B3+Delphi&aq=f&aqi=&aql=&oq=&gs_rfai=


 
Anatoly Podgoretsky ©   (2010-06-30 16:06) [3]

> linuxoid  (30.06.2010 15:23:01)  [1]

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


 
brother ©   (2010-06-30 16:10) [4]

unit pingModule;
interface
uses icmp, Windows;
const
INADDR_NONE: integer = -1;
procedure Ping (const Address, EchoString: PChar;var PingReply: TsmICMP_Echo_Reply;
const PingTimeout: Integer = 500);
function PingStatusToStr (StatusCode: integer): string;
function inet_addr (IPAddress: PChar): TipAddr; StdCall;
implementation
uses Dialogs, SysUtils;
procedure Ping (const Address, EchoString: PChar;
var PingReply: TsmICMP_Echo_Reply;
const PingTimeout: Integer = 500);
var
IPAddress: TipAddr;
ICMPPort: THandle;
begin
IPAddress:= inet_addr (Address);
if (IPAddress = INADDR_NONE) then
begin
raise Exception.Create ("Function call inet_addr failed. " +
"The IP address is probably invalid.");
end;
ICMPPort:= IcmpCreateFile ();
if (ICMPPort = INVALID_HANDLE_VALUE) then
begin
raise Exception.Create ("Function call IcmpCreateFile failed.");
end;
IcmpSendEcho (ICMPPort, IPAddress,
EchoString, Length (EchoString), nil,
@PingReply, SizeOf (PingReply), PingTimeout);
IcmpCloseHandle (ICMPPort);
end;

function PingStatusToStr (StatusCode: integer): string;
begin
case (StatusCode) of
IP_SUCCESS: Result:= "IP_SUCCESS";
IP_BUF_TOO_SMALL: Result:= "IP_BUF_TOO_SMALL";
IP_DEST_NET_UNREACHABLE: Result:= "IP_DEST_NET_UNREACHABLE";
IP_DEST_HOST_UNREACHABLE: Result:= "IP_DEST_HOST_UNREACHABLE";
IP_DEST_PROT_UNREACHABLE: Result:= "IP_DEST_PROT_UNREACHABLE";
IP_DEST_PORT_UNREACHABLE: Result:= "IP_DEST_PORT_UNREACHABLE";
IP_NO_RESOURCES: Result:= "IP_NO_RESOURCES";
IP_BAD_OPTION: Result:= "IP_BAD_OPTION";
IP_HW_ERROR: Result:= "IP_HW_ERROR";
IP_PACKET_TOO_BIG: Result:= "IP_PACKET_TOO_BIG";
IP_REQ_TIMED_OUT: Result:= "IP_REQ_TIMED_OUT";
IP_BAD_REQ: Result:= "IP_BAD_REQ";
IP_BAD_ROUTE: Result:= "IP_BAD_ROUTE";
IP_TTL_EXPIRED_TRANSIT: Result:= "IP_TTL_EXPIRED_TRANSIT";
IP_TTL_EXPIRED_REASSEM: Result:= "IP_TTL_EXPIRED_REASSEM";
IP_PARAM_PROBLEM: Result:= "IP_PARAM_PROBLEM";
IP_SOURCE_QUENCH: Result:= "IP_SOURCE_QUENCH";
IP_OPTION_TOO_BIG: Result:= "IP_OPTION_TOO_BIG";
IP_BAD_DESTINATION: Result:= "IP_BAD_DESTINATION";
IP_ADDR_DELETED: Result:= "IP_ADDR_DELETED";
IP_SPEC_MTU_CHANGE: Result:= "IP_SPEC_MTU_CHANGE";
IP_MTU_CHANGE: Result:= "IP_MTU_CHANGE";
IP_UNLOAD: Result:= "IP_UNLOAD";
IP_GENERAL_FAILURE: Result:= "IP_GENERAL_FAILURE";
else
Result:= "";
end;
end;

function inet_addr; external "WSock32.Dll";

end.


 
brother ©   (2010-06-30 16:11) [5]

unit icmp;
interface
uses windows;
Const
// IP_STATUS codes returned from IP APIs

IP_STATUS_BASE = 11000;
IP_SUCCESS = 0;
IP_BUF_TOO_SMALL = (IP_STATUS_BASE + 1);
IP_DEST_NET_UNREACHABLE = (IP_STATUS_BASE + 2);
IP_DEST_HOST_UNREACHABLE = (IP_STATUS_BASE + 3);
IP_DEST_PROT_UNREACHABLE = (IP_STATUS_BASE + 4);
IP_DEST_PORT_UNREACHABLE = (IP_STATUS_BASE + 5);
IP_NO_RESOURCES = (IP_STATUS_BASE + 6);
IP_BAD_OPTION = (IP_STATUS_BASE + 7);
IP_HW_ERROR = (IP_STATUS_BASE + 8);
IP_PACKET_TOO_BIG = (IP_STATUS_BASE + 9);
IP_REQ_TIMED_OUT = (IP_STATUS_BASE + 10);
IP_BAD_REQ = (IP_STATUS_BASE + 11);
IP_BAD_ROUTE = (IP_STATUS_BASE + 12);
IP_TTL_EXPIRED_TRANSIT = (IP_STATUS_BASE + 13);
IP_TTL_EXPIRED_REASSEM = (IP_STATUS_BASE + 14);
IP_PARAM_PROBLEM = (IP_STATUS_BASE + 15);
IP_SOURCE_QUENCH = (IP_STATUS_BASE + 16);
IP_OPTION_TOO_BIG = (IP_STATUS_BASE + 17);
IP_BAD_DESTINATION = (IP_STATUS_BASE + 18);

// The next group are status codes passed up on status indications to
// transport layer protocols.
IP_ADDR_DELETED = (IP_STATUS_BASE + 19);
IP_SPEC_MTU_CHANGE = (IP_STATUS_BASE + 20);
IP_MTU_CHANGE = (IP_STATUS_BASE + 21);
IP_UNLOAD = (IP_STATUS_BASE + 22);
IP_GENERAL_FAILURE = (IP_STATUS_BASE + 50);
MAX_IP_STATUS = IP_GENERAL_FAILURE;
IP_PENDING = (IP_STATUS_BASE + 255);

// Values used in the IP header Flags field.
IP_FLAG_DF = $2; // Don"t fragment this packet.

// Supported IP Option Types.
// These types define the options which may be used in the OptionsData field
// of the ip_option_information structure. See RFC 791 for a complete
// description of each.
IP_OPT_EOL = 0; // End of list option
IP_OPT_NOP = 1; // No operation
IP_OPT_SECURITY = $82; // Security option
IP_OPT_LSRR = $83; // Loose source route
IP_OPT_SSRR = $89; // Strict source route
IP_OPT_RR = $7; // Record route
IP_OPT_TS = $44; // Timestamp
IP_OPT_SID = $88; // Stream ID (obsolete)

MAX_OPT_SIZE = 40; // Maximum length of IP options in bytes

Type

TIPAddr=integer; // An IP address.
TIPMask=integer; // An IP subnet mask.
TIP_STATUS=Integer; // Status code returned from IP APIs.

POption_Information=^TOption_Information;
TOption_Information=record
Ttl:byte; // Time To Live
Tos:byte; // Type Of Service
Flags:byte; // IP header flags
OptionsSize:byte; // Size in bytes of options data
OptionsData:pointer; // Pointer to options data
end;
Picmp_echo_reply=^Ticmp_echo_reply;
Ticmp_echo_reply=record
Address:TipAddr; // Replying address
Status:integer; // Reply IP_STATUS
RoundTripTime:integer; // RTT in milliseconds
DataSize:word; // Reply data size in bytes
Reserved:word; // Reserved for system use
Data:pointer; // Pointer to the reply data
Options:Toption_Information; // Reply options
end;
TsmICMP_Echo_Reply=record
Address:TipAddr; // Replying address
Status:integer; // Reply IP_STATUS
RoundTripTime:integer; // RTT in milliseconds
DataSize:word; // Reply data size in bytes
Reserved:word; // Reserved for system use
DataPtr:pointer; // Pointer to the reply data
Options:Toption_Information; // Reply options
Data: array [0..255] of Char;
end;

function IcmpCreateFile:Thandle; StdCall;
function IcmpCloseHandle (H:Thandle):Bool; StdCall;
function IcmpSendEcho (IcmpHandle:Thandle;DestinationAddress:TipAddr;
RequestData:pointer;RequestSize:word;
RequestOptions:POption_Information;ReplyBuffer:pointer;
ReplySize:integer;Timeout:integer):Integer; stdcall;
Implementation
function IcmpCreateFile; external "Icmp.Dll";
function IcmpCloseHandle; external "Icmp.Dll";
Function IcmpSendEcho; external "Icmp.Dll";
end.


 
Плохиш ©   (2010-06-30 16:11) [6]


> linuxoid   (30.06.10 15:23) [1]
>
> Как это все реализовать?

Так же как ты и описал, только переведя текст в термины синтаксиса делфи.


 
brother ©   (2010-06-30 16:12) [7]

пример использования:

procedure TForm1.Timer1Timer(Sender: TObject);
var   Reply:TsmICMP_Echo_Reply;
begin
 Ping (pchar("10.1.1.1),nil,Reply, 500);
 if reply.Status=IP_SUCCESS then CheckBox1.Checked:=true
                            else CheckBox1.Checked:=false;
end;


 
brother ©   (2010-06-30 16:12) [8]

зы интерфейс уж сам)


 
Игорь Шевченко ©   (2010-06-30 16:43) [9]


>  if reply.Status=IP_SUCCESS then CheckBox1.Checked:=true
>                             else CheckBox1.Checked:=false;
>


сильно


 
Германн ©   (2010-06-30 17:28) [10]


>
> >  if reply.Status=IP_SUCCESS then CheckBox1.Checked:=true
> >                             else CheckBox1.Checked:=false;
>
> >
>
>
> сильно
>

Не очень. Вот если бы он ещё выражение в скобки заключил, тогда да!


 
brother ©   (2010-07-01 04:48) [11]

> сильно

зато наглядно ;)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2010.09.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.003 c
2-1277787890
zergost
2010-06-29 09:04
2010.09.26
данные поля на форме


11-1224133618
Danger
2008-10-16 09:06
2010.09.26
Lazarus 0.9.26 + fpc 2.2.2


15-1273835617
xayam
2010-05-14 15:13
2010.09.26
CrasyHouse


11-1221550087
MTsv DN
2008-09-16 11:28
2010.09.26
2 Vladimir Kladov


13-1125479652
Cherrex
2005-08-31 13:14
2010.09.26
Не могу перенести.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский