2008-12-07 17 views
5

ı bağlamak için port numarası hakkında rahatsız etmeden, bir TCP soket oluşturmak bağlı var belirlerken [socket.sin_port = 0]. Ancak daha sonra istemcinin port numarasını yazdırmak istersem bunu nasıl yaparım? İstemci C uygulaması (Linux'ta) sunucuya bağlı birçok istemci oluşturur. Sorunları ayıklamak için, ethereal üzerindeki trafiği yakalarım. Sorunun ortaya çıkması halinde port numarasının loglarını yazdırmayı düşündüm, böylece eterli filtrelerin filtrelenmesi kolaylaşır. TCP port numarası olan müşteri

Herhangi bir yardım

mutluluk duyacağız.

-Prabhu

cevap

10

Kullanım getsockname() başarılı bir bağlantıdan sonra soket adresi ve port olsun diyoruz.

Düzenleme: doğru yöntem adı. Bazen basit bir kelimeyi bir pencereden diğerine kopyalayamıyorum!

2

Darron'un getsockname() anlamına geldiğine inanıyorum. İstemci tarafında (connect() numaralı çağrıyı) programsal olarak port numarasını belirlemeniz gerekiyorsa, bu da istediğinizdir. Sunucu tarafında (yan tarafta bulunan bind()), bağlı soketten aynı bilgileri almak için getpeername() kullanırsınız. Ancak, hata ayıklama yapıyorsanız ve kodu değiştiremiyorsanız, işletim sistemine bağlı olarak netstat veya sockstat yardımcı programı gibi şeyler kullanarak sonuçlanırsınız. Linux altında hangi programların mevcut olduğundan emin değilim (veya özel paketiniz) ama ben man sockstat ile başlayacağım. Takılıysa, her iki taraftan da çalıştırabilir ve hangi son noktaların hangi süreçlere atandığını görebilirsiniz. Bunu grep ile birleştirin ve genellikle Ethereal'de hangi adresin filtreleneceğini öğrenebilirsiniz. İyi şanslar!

0
lsof -p <process id> | grep TCP 
İlgili konular