성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
[정성태] 저렇게 조각 코드 말고, 실제로 재현이 되는 예제 프로젝트를 압...
[정성태] Modules 창(Ctrl+Shift+U)을 띄워서, 해당 Op...
[정성태] 만드실 수 있습니다. 단지, Unity 엔진 내의 스크립트와 W...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>소켓 바인딩 시 "System.Net.Sockets.SocketException: An attempt was made to access a socket in a way forbidden by its access permissions" 오류 발생 </h1> <p> 트위터에서 본,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > guywhataguy / SourceCodeVisualizer ; <a target='tab' href='https://github.com/guywhataguy/SourceCodeVisualizer'>https://github.com/guywhataguy/SourceCodeVisualizer</a> </pre> <br /> 도구를 실행해 보는데 8080 포트에서 다음과 같이 바인딩 오류가 발생합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > c:\temp> visualize.exe 2020/06/23 13:23:26 starting 2020/06/23 13:23:26 <span style='color: blue; font-weight: bold'>listen tcp :8080: bind: An attempt was made to access a socket in a way forbidden by its access permissions.</span> panic: listen tcp :8080: bind: An attempt was made to access a socket in a way forbidden by its access permissions. goroutine 1 [running]: log.Panic(0xc0000c9f28, 0x1, 0x1) C:/Go/src/log/log.go:351 +0xb3 main.main() c:/temp/visualize.go:279 +0x38c </pre> <br /> 이상하군요, 원래 다른 포트가 점유하고 있으면 "Only one usage of each socket address (protocol/network address/port) is normally permitted"와 같은 오류가 발생하는데 "access permissions"가 나오니 좀 당황스럽습니다. 게다가, 무작위로 다른 포트를 몇 개(예를 들어 5359번) 시도했는데 희한하게 모두 저 오류가 발생했습니다. 그나마 대략 10,000번 이후의 포트에 대해서는 저런 오류가 안 나왔는데... 왜 그런 걸까요? ^^<br /> <br /> go 언어를 구글이 만들어서 크롬과 유사하게 보안을 위해 막아두는 포트가 있었던 그 문제였나 싶어서 찾아 봤는데,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 로컬 PC에서 개발 중인 ASP.NET Core 웹 응용 프로그램을 다른 PC에서도 접근하는 방법 ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/12081'>https://www.sysnet.pe.kr/2/0/12081</a> </pre> <br /> 그러기에는 "access permissions"에 속하는 포트가 압도적으로 많았습니다. 혹시나... Go 언어만 그런가 싶어 C#으로 만들었더니,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > using (Socket srvSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) { IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, int.Parse(args[0])); srvSocket.Bind(endPoint); srvSocket.Listen(10); } </pre> <br /> 그래도 동일한 오류가 발생하는군요. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\temp\ConsoleApp1\bin\Debug> ConsoleApp1.exe 8932 Unhandled Exception: System.Net.Sockets.SocketException: An attempt was made to access a socket in a way forbidden by its access permissions at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) at System.Net.Sockets.Socket.Bind(EndPoint localEP) at ConsoleApp1.Program.Main(String[] args) in C:\temp\ConsoleApp1\ConsoleApp1\Program.cs:line 19 </pre> <br /> 여기까지 오니... 예전에 써두었던 글이 하나 떠올랐습니다. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 서버용 Socket에서 사용하는 포트가 충돌한다면? ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/1807'>https://www.sysnet.pe.kr/2/0/1807</a> </pre> <br /> 오호~~~ 다음과 같이 엄청난 포트들이 점유되고 있었습니다.<br /> <br /> <pre style='height: 400px; margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\Windows\System32> <span style='color: blue; font-weight: bold'>netsh int ipv4 show excludedportrange protocol=tcp</span> Protocol tcp Port Exclusion Ranges Start Port End Port ---------- -------- 80 80 1605 1704 1805 1904 1905 2004 2005 2104 2180 2279 2291 2390 2419 2518 2721 2820 2953 3052 3053 3152 3153 3252 3253 3352 3390 3489 3490 3589 3662 3761 3762 3861 4064 4163 4164 4263 4264 4363 4364 4463 4464 4563 4564 4663 4664 4763 4764 4863 5241 5340 5357 5357 5358 5457 5458 5557 5558 5657 5658 5757 5758 5857 5940 6039 6040 6139 6233 6332 6333 6432 6433 6532 6533 6632 8032 8032 8033 8132 8133 8232 8233 8332 8333 8432 8433 8532 8533 8632 8633 8732 8733 8832 8833 8932 9028 9127 9128 9227 9228 9327 9328 9427 9428 9527 50000 50059 * * - Administered port exclusions. </pre> <br /> 도대체 누가 저렇게 등록했는지 소스가 없어서 범인을 찾을 수 없습니다. ^^; 검색해 보면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Cannot bind to some ports due to permission denied ; <a target='tab' href='https://stackoverflow.com/questions/48478869/cannot-bind-to-some-ports-due-to-permission-denied'>https://stackoverflow.com/questions/48478869/cannot-bind-to-some-ports-due-to-permission-denied</a> </pre> <br /> Hyper-V가 그렇다고들 하는데, 꼭 그런 것만은 아닌 게 또 다른 Hyper-V 설치 머신에서는 다음과 같이 적은 포트가 점유되어 있었습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\Windows\System32> <span style='color: blue; font-weight: bold'>netsh int ipv4 show excludedportrange protocol=tcp</span> Protocol tcp Port Exclusion Ranges Start Port End Port ---------- -------- 80 80 1065 1164 1372 1471 1543 1642 1666 1765 1766 1865 1966 2065 2066 2165 2180 2279 2280 2379 2523 2622 2732 2831 2832 2931 5357 5357 8060 8060 50000 50059 * * - Administered port exclusions. </pre> <br /> 정리하면, 환경이 다양하다 보니 Binding 시에 해당 포트가 꼭 비어 있지 않을 확률이 점점 더 높아지고 있으니 주의해야겠습니다. ^^ (<a target='tab' href='https://www.sysnet.pe.kr/2/0/12305'>excludedportrange 삭제 방법</a>)<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
2146
(왼쪽의 숫자를 입력해야 합니다.)