2012-02-20 23 views
8

Tôi có một tình huống thú vị trên tay, và tôi không hoàn toàn chắc chắn làm thế nào để đi về xử lý sự cố nó. Tôi đã làm một vài tìm kiếm cho một cái gì đó tương tự như tình hình của tôi, nhưng không có gì hoàn toàn phù hợp với nó. Nếu câu trả lời đã tồn tại ở đâu đó ở đây, tôi sẽ đánh giá cao bất cứ ai có thể chỉ cho tôi đi đúng hướng.Điều gì sẽ khiến ICMPsendEcho thất bại khi ping.exe thành công

Ok, cho vấn đề.

Tôi đang viết ứng dụng cơ quan giám sát để theo dõi kết nối internet. Nó được thiết kế để ping một tập hợp các tên miền tại một khoảng thời gian đã định và khi bất kỳ người nào trong số họ trả lời ping, bộ đếm thời gian trạng thái được đặt lại. Nếu bộ đếm thời gian trạng thái vượt quá ngưỡng đã đặt, một số giai đoạn của hành động khắc phục được cố gắng khắc phục sự cố.

Đủ đơn giản phải không?

Đây là nơi thật lạ.

Tôi đang sử dụng ICMPsendecho để đưa ra yêu cầu ping. Trên môi trường phát triển của tôi (win7) nó có vẻ làm việc tốt, thử nghiệm và mọi thứ diễn ra suôn sẻ. Tuy nhiên, trong môi trường mà nó đang được triển khai, nó không nhận được phản hồi. Môi trường triển khai là một máy tính Windows XP sp3.

Trong suốt quá trình xử lý sự cố, tôi đã lưu ý một số điều, có thể có hoặc không hữu ích khi thực sự cố giải quyết vấn đề này.

windows ping.exe hoạt động tốt trên môi trường triển khai cho tất cả các miền tôi đang sử dụng để kiểm tra trạng thái kết nối, chỉ các cuộc gọi ICMPsendecho của tôi dường như không tạo ra phản hồi.

Tôi đã cài đặt wireshark trên môi trường triển khai và tôi có thể thấy các gói đang phát hành thành công cho các yêu cầu trên cả hai loại ping. các cửa sổ ping tạo ra các gói yêu cầu với chiều dài 74 byte, và các chương trình của tôi gọi tạo ra các gói có độ dài 42 byte. Các gói phản hồi của Windows tương tự 74 byte khi chúng được nhận.

Chuyển sang môi trường phát triển trong một phút, với cài đặt Wireshark. Windows ping tạo ra một tình huống tương tự như trong môi trường triển khai với các gói. Tuy nhiên, ứng dụng của tôi, khi nó tạo ra các yêu cầu các gói có chiều dài 42 byte (giống như môi trường triển khai), nhưng các phản hồi mà nó nhận được là 60 byte. Như tôi đã nói, thông tin đó có thể hoặc không hữu ích, nhưng tôi đang cố gắng tìm hiểu lý do tại sao ứng dụng này không tạo ra phản hồi ICMP khi windows ping có vẻ hoạt động tốt trên máy đó.

Một chút miếng ngon khác có thể giúp, kết nối internet được giám sát sử dụng các điểm nóng nâng cao 4g AT ATT, thiết bị thực tế là thẻ không dây MC8790 sierra không dây.

Bất cứ ai có bất kỳ ý tưởng nào về lý do các ping này bị lỗi?

cảm ơn trước mọi thông tin hữu ích mà bạn có thể có và dành thời gian đọc bài đăng của tôi.

PS.

+2

ICMPSendEcho có trả về lỗi không? – OnTheFly

+0

Không có lỗi, nó chỉ không bao giờ nhận được một phản ứng. – PoultrySlave

+0

Phiên bản windows nào? –

Trả lời

3

Câu trả lời có thể bằng kích thước của ping bạn gửi (có vẻ là kích thước tối thiểu không có giấy tờ 20 byte cho tải trọng). Xem bài đăng này để biết thêm thông tin: http://groups.google.com/group/microsoft.public.win32.programmer.networks/browse_thread/thread/2b28b994a8067713?pli=1

+0

Cảm ơn bạn đã trả lời! Tôi đã không nhận thấy nó ngay lập tức, nhưng vấn đề vẫn chưa được giải quyết và sẽ cần phải được khắc phục tại một số điểm. Tôi sẽ xem xét điều này như một nguyên nhân có thể. – PoultrySlave

+0

Đây thực sự là nguyên nhân của vấn đề. Mã mà chúng tôi đang sử dụng đã phân bổ không gian không chính xác cho gói phản hồi. Tôi nghĩ rằng sẽ có một lỗi/ngoại lệ, nhưng đó không phải là trường hợp. Có nhiều vấn đề khác khi chơi tại vị trí của khách hàng cụ thể này, vì vậy nó đã giải quyết được vấn đề khó khăn hơn nhiều. – PoultrySlave

+0

@PoultrySlave bạn có thể giải thích về điều đó không? Những gì bạn đã kết thúc bằng cách sử dụng cho kích thước bộ đệm phản ứng? Nhóm Google liên kết các cuộc đàm phán về việc tăng kích thước thử nghiệm, nhưng nó không rõ ràng với tôi về kích thước nào nên được sử dụng nói chung. Tôi nhìn thấy một vấn đề tương tự, IcmpSendEcho lần ra khi ping hoạt động tốt và tò mò những gì bạn đã kết thúc làm để làm cho nó hoạt động. – Nerdtron

2

Bạn đã kiểm tra quyền người dùng chưa? Ping.exe không yêu cầu quyền quản trị viên, nhưng các lệnh ICMP thô trong Windows cần có quyền quản trị viên.

Xem ví dụ này: http://www.delphi-central.com/tutorials/icmp-ping.aspx

Xin lưu ý, tuy nhiên, cho Windows NT và Windows 2000 triển khai, Raw Sockets này tùy thuộc vào kiểm tra an ninh và là chỉ có thể cho các thành viên của nhóm quản trị viên.


Một lý do khác có thể có thể là một bức tường lửa mà khối các gói tin ICMP.

+0

Tại sao ICMPsendecho lại tạo ra các phản hồi trong môi trường phát triển chứ không phải trong môi trường triển khai? Tôi chưa kiểm tra quyền người dùng, nhưng có vẻ như với tôi, trừ khi việc sử dụng icmp.dll khác với các cửa sổ 7 (và có thể là) cả hai đều không tạo được phản hồi. Tuy nhiên, vì tôi đang ở trạng thái bế tắc, tôi sẽ tìm hiểu ý tưởng của bạn thêm nữa, vì tôi không có ý tưởng tốt. cảm ơn phản hồi của bạn. – PoultrySlave

+0

Nếu ứng dụng có quyền quản trị trong cả hai môi trường, cả hai đều sẽ hoạt động. Vì vậy, tôi đoán một thiết lập tường lửa có thể khác nhau (Xem chỉnh sửa của tôi). – mjn

0

Chúng tôi đã gặp lỗi tương tự với ứng dụng khách. Giải pháp là triển khai IcmpSendEcho2 như một kế hoạch B khi IcmpSendEcho thất bại. Nó đã làm việc!

+0

Làm cách nào để bạn triển khai hàm IcmpSendEcho2? –

Các vấn đề liên quan