
net.tcp-आधारित WCF ट्रैफ़िक के लिए एक प्रॉक्सी।
आप या तो टूल को एक बार कंपाइल कर सकते हैं और फिर परिणामी बाइनरी का उपयोग कर सकते हैं, या आप इसे "स्क्रिप्ट की तरह" चला सकते हैं (Go टूलचेन इसे फ्लाई पर कंपाइल करेगा)।
डेवलपमेंट के लिए, बाद वाला विकल्प सुविधाजनक है।
उत्पादक उपयोग के लिए, इसे एक बार (cli निर्देशिका से) कंपाइल करने और परिणामी निष्पादन योग्य का उपयोग करने की अनुशंसा की जाती है।
Go कंपाइलर के लिए धन्यवाद, आप Linux या Windows के लिए और उनसे बना सकते हैं।
निर्माण के लिए Go के कम से कम संस्करण 1.18 की आवश्यकता है (Go 1.23 के साथ परीक्षण किया गया)।
Linux से Windows या Linux के लिए बनाने के लिए, बस GOOS को उचित रूप से सेट करें (cli निर्देशिका से निष्पादित करें):```
GOOS=windows GOARCH=amd64 go build -o wcfproxy.exe
- **मुख्य विशेषताएँ**: सिस्टम निगरानी, अलर्ट, रिपोर्टिंग
- **एकीकरण**: Prometheus, Grafana, Slack के साथ काम करता है```
GOOS=linux GOARCH=amd64 go build -o wcfproxy
विंडोज़ पर निर्माण करने के लिए, समतुल्य कमांड चलाएँ, उदाहरण के लिए PowerShell से:``` $env:GOOS='windows'; $env:GOARCH='amd64'; go build -o wcfproxy.exe
contribute to the project. Whether you are a beginner or an experienced developer, there are many ways to get involved.
- Reporting bugs
- Suggesting enhancements
- Writing code improvements
- Improving documentation
- Helping others in discussions
## Bug Reports and Feature Requests
If you encounter a bug or have an idea for a new feature, please search the [issue tracker](https://github.com/yourproject/issues) to check if it has already been reported. If not, feel free to [open a new issue](https://github.com/yourproject/issues/new). Provide as much detail as possible to help us understand and address the issue.
## Pull Requests
1. Fork the repository.
2. Create a new branch (`git checkout -b feature-branch`).
3. Make your changes.
4. Commit your changes (`git commit -m 'Add some feature'`).
5. Push to the branch (`git push origin feature-branch`).
6. Open a pull request.
Please ensure your code adheres to our coding standards and includes appropriate tests if applicable.
## Community
Join our [Discord](https://discord.gg/example) server to connect with other users and contribute to the discussion.```
$env:GOOS='linux'; $env:GOARCH='amd64'; go build -o wcfproxy
wcfproxy के लिए कॉन्फ़िगरेशन एक JSON फ़ाइल के माध्यम से प्रदान किया जाता है।
डिफ़ॉल्ट रूप से, कॉन्फ़िगरेशन फ़ाइल config.json का उपयोग किया जाता है, लेकिन -config पैरामीटर के साथ कॉन्फ़िगरेशन फ़ाइल का पथ निर्दिष्ट किया जा सकता है।
कॉन्फ़िगर फ़ाइल में मनमानी संख्या में नामित कॉन्फ़िगरेशन होते हैं, जैसे:
{
"example": {
"enabled": true,
"listen": "127.0.0.1:8080",
"target": "https://example.com/ws"
}
}
``````json
{
"my-config": {
" ... ": " ... "
}
}
नामित कॉन्फ़िग ऑब्जेक्ट्स का मान Config struct से मेल खाना चाहिए (देखें Config संरचना)।
यह स्रोत फ़ाइल इसमें शामिल टिप्पणियों के साथ wcfproxy के कॉन्फ़िगरेशन विकल्पों के लिए सबसे सटीक दस्तावेज़ीकरण के रूप में भी काम करती है।
प्रदान किए गए सभी कॉन्फ़िगरेशन में से, जिसे उपयोग करना है, उसकी पहचान नाम से -enable कमांड लाइन विकल्प के माध्यम से की जाती है:```
wcfproxy.exe -config config.json -enable my-config
## कॉन्फ़िग संरचना
प्रत्येक कॉन्फ़िग ऑब्जेक्ट की शीर्ष-स्तरीय संरचना निम्नलिखित है:```json
{
"listen": "[::1]:8000",
"connect": "[::1]:9000",
"retarget": "net.tcp://127.0.0.1:8000/WCFLab/WCFDemoService/nettcp",
"retarget-map": {
"nettcps": "net.tcp://localhost:8210/WCFLab/WCFDemoService/nettcps",
"winauth": "net.tcp://localhost:8220/WCFLab/WCFDemoService/nettcp-winauth"
},
"log-level": "debug|info|warn|error",
"log-file": "path/to/log/file",
"tls-server": {
" ... ": " ... "
},
"tls-client": {
" ... ": " ... "
},
"ntlm": {
" ... ": " ... "
},
"interceptor": {
" ... ": " ... "
},
"ctrl": {
" ... ": " ... "
}
}
ध्यान दें कि यदि NTLM कॉन्फ़िगरेशन मौजूद है तो TLS कॉन्फ़िगरेशन (tls-server और/या tls-client) प्रदान नहीं किया जा सकता है।
listen - TCP-एंडपॉइंट जिस पर wcfproxy को सुनना चाहिए, उदा. 127.0.0.1:8000 या [::1]:8000connect - अपस्ट्रीम WCF सर्वर का TCP-एंडपॉइंट, उदा. 127.0.0.1:9000 या [::1]:9000retarget - मूल लक्ष्य विनिर्देश (और retarget-map के लिए फ़ॉलबैक); स्पष्टीकरण के लिए लक्ष्य पुनर्लेखन देखेंretarget-map - retarget का सामान्यीकरण; कई एंडपॉइंट के लिए लक्ष्य पुनर्लेखन करने की अनुमति देता है (केवल तब उपयोगी जब एक ही पोर्ट पर कई WCF सेवाओं के साथ काम कर रहे हों)
retarget-map में कोई कुंजी वर्तमान लक्ष्य से मेल खाती है, तो लक्ष्य URI को अपस्ट्रीम संचार के लिए दिए गए मान से बदल दिया जाएगा।retarget-map की कोई कुंजी वर्तमान लक्ष्य से मेल नहीं खाती, तो इसके बजाय retarget का उपयोग किया जाएगा।log-level - लॉग स्तर; उपलब्ध मान: debug, info (डिफ़ॉल्ट), warn, errorlog-file - लॉग फ़ाइल का पथ; यदि कोई पथ प्रदान नहीं किया गया है, तो लॉग stdout पर लिखा जाता हैtls-server - TlsServerConfig का उदाहरण (देखें TLS सर्वर कॉन्फ़िगरेशन); केवल तब आवश्यक है जब TLS अपग्रेड समर्थित होना चाहिएtls-client - TlsClientConfig का उदाहरण (देखें TLS क्लाइंट कॉन्फ़िगरेशन); केवल प्रासंगिक यदि TLS अपग्रेड समर्थित होना चाहिएntlm - NtlmConfig का उदाहरण (देखें NTLM कॉन्फ़िगरेशन); केवल तब आवश्यक है जब NTLM अपग्रेड (सीधे या SPNEGO के माध्यम से) समर्थित होना चाहिएinterceptor - InterceptorConfig का उदाहरण (देखें इंटरसेप्टर कॉन्फ़िगरेशन); आवश्यकctrl - ControlServerConfig का उदाहरण (देखें नियंत्रण सर्वर कॉन्फ़िगरेशन) जो एक डिफ़ॉल्ट HTTP इको सर्वर (HTTP इंटरसेप्टर के साथ उपयोगी) के साथ-साथ संदेश प्रवाह को नियंत्रित करने के लिए एक छोटा API प्रदान कर सकता है (अभी भी विकास में है)TLS सर्वर-साइड कॉन्फ़िगरेशन सबसे सामान्यतः प्रासंगिक TLS सर्वर सेटिंग्स पर नियंत्रण प्रदान करता है। इसकी निम्नलिखित संरचना है:```json { "cert-pem": "path/to/certificate", "cert-key": "path/to/certificate-key", "max-version": "1.0|1.1|1.2|1.3", "min-version": "1.0|1.1|1.2|1.3", "client-roots": "path/to/client-ca1,path/to/client-ca2", "client-auth": "none|request|require-any|verify-if-given|require-and-verify", "keylog": "path/to/keylog-file" }
#### TLS सर्वर कॉन्फ़िगरेशन विकल्प
+ `cert-pem` - X.509 प्रमाणपत्र (PEM प्रारूप में) का पथ
+ `cert-key` - प्रमाणपत्र के लिए संबंधित कुंजी का पथ
+ `max-version` - अधिकतम स्वीकार्य TLS संस्करण; `1.0`, `1.1`, `1.2`, `1.3` (डिफ़ॉल्ट) में से एक
+ `min-version` - न्यूनतम स्वीकार्य TLS संस्करण; `1.0` (डिफ़ॉल्ट), `1.1`, `1.2`, `1.3` में से एक
+ `client-roots` - क्लाइंट प्रमाणीकरण के लिए स्वीकार्य रूट प्रमाणपत्रों (PEM) के पथों की अल्पविराम से अलग की गई सूची; वैकल्पिक
+ `client-auth` - क्लाइंट प्रमाणीकरण नीति; सबसे उपयोगी मान: `none` (डिफ़ॉल्ट), `require-and-verify`
+ `keylog` - NNS प्रारूप में TLS रहस्य लिखने के लिए फ़ाइल
### TLS क्लाइंट कॉन्फ़िगरेशन
TLS क्लाइंट साइड कॉन्फ़िगरेशन सबसे सामान्यतः प्रासंगिक TLS क्लाइंट सेटिंग्स पर नियंत्रण देता है।
इसकी निम्नलिखित संरचना है:```json
{
"cert-pem": "path/to/certificate",
"cert-key": "path/to/certificate-key",
"max-version": "1.0|1.1|1.2|1.3",
"min-version": "1.0|1.1|1.2|1.3",
"roots": "path/to/root-ca1,path/to/root-ca2",
"server-name": "therealone.local",
"skip-verify": false
}
roots - रूट-CAs (PEM) के पथों की अल्पविराम से अलग की गई सूची का पथ; skip-verify के साथ वैकल्पिकserver-name - सर्वर का नाम (SNI); वैकल्पिकskip-verify - bool; क्या क्लाइंट को सर्वर प्रमाणपत्र के सत्यापन को छोड़ देना चाहिए (डिफ़ॉल्ट: false)